DDL,DML,DQL

1.DDL

基本语句

-- 创建数据库
CREATE DATABASE test;
-- 删除数据库
DROP DATABASE test;
-- 创建数据库并设置字符集
CREATE DATABASE test CHARSET utf8;
-- 修改字符集 数据库一旦创建数据库名字不可以在修改,可以修改字符集
ALTER DATABASE test CHARSET gbk;
-- 删除以前没有用的数据库
DROP DATABASE car_bd;
DROP DATABASE xsxk;

创建数据库表

表 表名
    
    列  特定信息  姓名,性别....
     
    行 数据  张三  男
    
    创建表的步骤:
      确定表名:  学生信息  -- 学生表
      确定列名:  学生的具体信息   姓名,性别,生日....
      列的数据类型:
         字符串型:
           char(n)    长度为n的定长字符串, 例如n=5, 如果我们只存储了2个字符进去,长度依然是5,会补空格
                      一般用来存储长度固定的数据,  例如性别,电话.
           varchar(n) 最大长度为n的变长字符串, 例如n=10,如果我们只存储了3个字符,实际长度为3
           
         日期时间类型 
             date     日期--年月日
             datetime 时间--年月日 时分秒
             
          数值
           整数
             TINYINT 1
             SMALLINT 2
             MEDIUMINT 3
             int       4
             bigint    8
                    
            浮点:
             decimal(M,D) M:精度,数据的总长度,D:标度数据后面小数点后的长度        
             3,2
             1.73
             
          TEXT列字符字符串  长文本类型  例如存储新闻信息,小说...
      列的约束:  列的规则 
 

-- 设置学校数据库
CREATE DATABASE schooldb CHARSET utf8;
-- 设置学生表
CREATE TABLE student(
id INT,
NAME VARCHAR(10),
gender CHAR(1),
birthday DATE,
phonenum CHAR(11),
adress VARCHAR(30),
height DECIMAL(3,2),
reg_time DATETIME);

删除表

DROP TABLE student;

 创建学生表并且增加约束条件

CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,-- 设置主键自增长
NAME VARCHAR(10) NOT NULL,
gender CHAR(1),
birthady DATE NOT NULL,
phonenum CHAR(11) NOT NULL UNIQUE,
adress VARCHAR(30),
height DECIMAL CHECK(height<2.6 AND height>0),
reg_time DATETIME);

创建学生表增加约束和注释

CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号 主键',
NAME VARCHAR(10) NOT NULL COMMENT '姓名',
gender CHAR(1) DEFAULT '男' COMMENT '性别 默认为男',
birthday DATE NOT NULL COMMENT '出生日期',
phonenum CHAR(11) NOT NULL UNIQUE  COMMENT '电话号 唯一',
adress VARCHAR(30) COMMENT '家庭住址',
reg_time DATETIME COMMENT '操作时间')

2.DML

1.添加数据

方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;
方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)

其中最常用到的就是方式1.

INSERT INTO student (NAME,brithday,phonenum,reg_time)VALUES('任庆','2003-04-30','15129935268',NOW())//给学生表添加一条数据

2.删除数据

DELETE FROM stu WHERE 条件

3.更新数据

UPDATE 表名 SET 列名='西安' WHERE 条件

3.DQL

基本查询语法

select 查询列 from 表名 where 条件 排序 数量限制 分组....

查询特定结果的列

SELECT 列名1.... FROM 表名

查询所有的列

SELECT * FROM 表名

字符串连接

SELECT CONCAT(列数1,':',列数2)FROM 表名

其中的concat类似于Java中的函数,在数据库中函数分为单行函数和分组函数。单行函数会把每条结果进行操作,分组函数会把多行数据最后处理为一行。

以下是常用的单行函数

-- 字符函数
-- length,以字节为单位
SELECT NAME,LENGTH(NAME) FROM student
-- concat字符串拼接
SELECT CONCAT(NAME,':',gender)AS  '姓名,性别' FROM student
-- upper 和 lower//大写和小写
UPDATE student SET NAME = 'jaLe' WHERE NAME ='刘亦菲'
SELECT UPPER(NAME),LOWER(NAME) FROM student 
-- substring字符串截取
SELECT SUBSTRING(NAME,1,3) FROM student
-- instr 返回字符串第一次出现的位置
SELECT INSTR(NAME,'庆'),INSTR(NAME,'宁') FROM student 
-- trim 去前后的空格或者去掉字串格式为trim(指定字串 from 字符串)
SELECT TRIM('任' FROM NAME) FROM student
-- lpad rpad 左右填充
SELECT LPAD(RPAD(NAME,4,'a'),6,'b') FROM student 
-- replace 字符串替换
SELECT REPLACE(NAME,'任庆','猴子大王666') FROM student

-- case when 条件 then 结果1 end;可以有多个when
-- ifnull(被检测的默认值,默认值)检测是否为null则返回指定的值,否则返回原本的值
-- if函数,if(条件,结果1,结果2)
SELECT NAME,CASE WHEN gender='男' THEN '性别是男的' END  FROM student-- 要用end结尾
SELECT NAME,IFNULL(adress,'暂时没有录入')AS '家庭住址' FROM student
SELECT NAME,IF(NAME='任庆','帅哥','普通人')AS '是不是帅哥' FROM student


-- 数学函数、日期
-- round 四舍五入
ALTER TABLE student ADD COLUMN height DECIMAL(3,2)-- 添加新属性
SELECT NAME,ROUND(height,1) FROM student
-- ceil 向上取整 floor向下取整
SELECT NAME,CEIL(height),FLOOR(height) FROM student 
-- truncate 小数点后截断几位
SELECT TRUNCATE(height,1) FROM student 

-- mod 取余
SELECT NAME,MOD(id,2) FROM student
-- rand 随机数
SELECT NAME,RAND()*10 FROM student


-- 日期函数
-- now 当前时间date_format更改日期格式
SELECT NAME,DATE_FORMAT(birthday,'%Y-%m') FROM student
-- 计算两个日期相差多久datadiff
SELECT NAME,DATEDIFF(NOW(),birthday) FROM student

你可能感兴趣的:(数据库,oracle,mysql)