DDL语言:
-
对数据库的DDL
-
创建数据库
- 创建数据库:create database 数据库名
- 创建数据库并且判断此数据库是否已经存在:create database if not exists 数据库名
- 创建数据库并指定字符集:create database if not exists 数据库名 character set 字符集;
-
删除数据库
- drop database 数据库名;
- drop database if exists 数据库名;
-
修改数据库
- alter database 数据库名 character set 字符集;
-
查询数据库
- 查看所有数据库:show databases
- 查看数据库创建的SQL语句:show create database 数据库名;
- 使用数据库
- use 数据库名;
-
-
对表的DDL
-
创建表 格式: create table 表名( 字段名1 数据类型 [完整性约束], 字段名2 数据类型 [完整性约束], ..... 字段名n 数据类型 [完整性约束] ); 数据类型: 1. varchar(n) 字符类型,具有n个字符长度 2. Int 整型 3. double(m,n) 浮点类型 m表示数字的位数,n表示小数点后的位数 4. 日期类型: Date 日期类型 格式:yyyy-MM-dd Datetime 日期类型 格式: yyyy-MM-dd HH:mm:ss Timestamp 日期类型 表示的是时间戳 格式:yyyy-MM-dd HH:mm:ss 注意:用该 数据类型修饰的字段,如果没有填写值,就会补充当前系统日期为默认值
-
删除表 1. drop table 表名;
-
修改表 1. 修改表名 alter table 表名 rename to 新表名; 2. 修改字段名 alter tabel 表名 change 旧字段名 新字段名 数据类型; 3. 修改字段的数据类型 alter table 表名 modify 字段名 新数据类型; 4. 添加字段 alter table 表名 add 字段名 数据类型; 5. 删除字段 alter table 表名 drop 字段名;
-
查询表 1. show tables; 查看当前数据库下有哪些表 2. desc 表名;查看表结构 3. show create table 表名;
练习:
1.创建一个指定字符集(gbk)的数据库(mydb)
2.修改数据库mydb的字符集为utf8
3.使用数据库,并创建表(Student)
4.表Student具有如下字段:id int,name 字符类型,sex 字符类型,score 浮点类型
5.修改表的名字为t_student,并添加字段入校时间(time 日期类型)
6.修改字段sex的名字为gender
7.删除表
DML语言(对表中的数据进行操作:添加、删除、修改):
-
添加数据 1. insert into 表名(字段名1,字段名2,...,字段名n)values(数据1,数据2,....,,数据n); 2. insert into 表名 values(数据1,数据2,....,,数据n); 注意:1.数据的顺序必须和表中的字段顺序保持一致;2.数据的数量和字段的数量一致 3.insert into 表名(字段名1,字段名2,...,字段名n)values(数据1,数据2,....,,数据n),(数据 1,数据2,....,数据n);
-
删除数据
delete from 表名 [where子句]
-
修改数据
update 表名 set 字段=数据 [where 子句]
DQL语言(数据查询语言,对数据进行查询操作):查询数据:
select 字段1…字段n from 表名
[where 子句]
[group by子句 [having子句]]
[order by 子句[desc | asc]]
[聚合函数,limit子句]
注意:可以使用*表示所有字段
select * from 表名;查询所有字段
基础查询:
指定字段查询
select 字段名1,…字段名2 from 表名
例:
– 查询所有的数学成绩
– select math from T_SCORE;
– 查询所有数学、语文、英语的成绩
– select math,chinese,english from t_score;
出除空值
– IFNULL(expr1,expr2) 如果expr1为NULL,就使用epxr2表达式
– select IFNULL(math,0) from t_score;
取别名
使用AS关键字取别名,可以省略
例:
select (IFNULL(math,0)+IFNULL(english,0)+IFNULL(chinese,0)) as sum from t_score;
select (IFNULL(math,0)+IFNULL(english,0)+IFNULL(chinese,0)) sum from t_score;
参与运算
– 参与运算(四则运算)
– select (math*english+chinese)%10 from t_score;
– select (IFNULL(math,0)+IFNULL(english,0)+IFNULL(chinese,0)) from t_score;
where子句(用于条件判断)
格式:
where 条件
关系运算符(>、<、>=、<=、=、!=)
– 查询英语成绩刚好等于90分的信息
– select * from t_score where english=90;
– 查询英语成绩刚好不等于90分的信息
– select * from t_score where english!=90;
– 查询数学成绩大于70的所有信息
– select * from t_score where math>70;
[NOT] IN(集合)
– 查询数学成绩刚好等于80,68,50的所有信息
– select * from t_score where math IN (80,68,50);
– 查询数学成绩刚好不等于80,68,50的所有信息
– select * from t_score where math Not IN (80,68,50);
BETWEEN…AND… 在范围之间
– 查询数学成绩在80-90之间的所有信息
– select * from t_score where math BETWEEN 80 and 90;
&&(and)、||(or)
– 查询数学成绩在80-90之间的所有信息
– select * from t_score where math>=80 && math<=90;
– select * from t_score where math=80 || math=68 || math=50;
– select * from t_score where math>=80 and math<=90;
模糊查询(like)
占位符
下划线 (_):表示一个字符
百分号(%):表示0个或者多个字符
– 查询王姓同学的所有信息
– select * from t_score where name=“王”;-- 错误
– select * from t_score where name like “王%”;
– 查询姓名中包含‘二’这个字符的同学的所有信息
– select * from t_score where name like ‘%二%’;
– 查询某某三同学的所有信息
– select * from t_score where name like ‘%三’;
查询null值
– 查询没有考语文所有的信息
– select * from t_score where chinese=null;-- 错误
– select * from t_score where chinese="";-- 错误
select * from t_score where chinese is null;
排序
对查询的结果进行排序ORDER BY
ASC表示升序
DESC表示降序
注意:可以多个字段一起排序,先按照某个字段排序,相同的再按照另一个字段排序
– 查询语文大于等于70的所有同学的信息并按照降序排序
– select * from t_score where chinese>=70 ORDER BY chinese desc;
– 查询所有的信息,先按照数学成绩进行降序拍排序,
– 相同数学再按照语文成绩进行降序排序
– select * from t_score ORDER BY math desc,chinese desc;
– select * from t_score ORDER BY english asc,chinese desc;
聚合函数:作用于数据表中的字段,按照列来进行统计、计算等
count(字段):统计该字段有效数据量
– 统计班上有多少同学
– select count(id) from t_score;-- 注意:不能使用带有null值的字段进行统计
sum(字段):对该字段进行求和
– 统计英语成绩的总和
select sum(english) from t_score;
avg(字段):对该字段求平均值
– 统计数学成绩的平均值
select avg(math) from t_score;
max(字段):求该字段的最大值
min(字段):求该字段的最小值
– 统计语文成绩的最高分和最低分
– select max(chinese) from t_score;
– select min(chinese) from t_score;
分页查询(limit):
– 分页查询 每页显示三条数据
select * from t_score limit 5,5;
– select * from t_score limit num1,num2;
– num1表示从表中的第几条数据开始查询(起始位置为0)
– num2表示从表中查询多少条数据
–表达式 limit (pageCode-1)*pageSize,pageSize
分组查询
关键字:group by 字段 [having 判断条件]
– 查询班级男生和女生的人数
– select gender,count(gender) from t_student group by gender;
– 查询班级中年龄相同的同学的人数
– SELECT age,count(age) from t_student group by age;
– 查询班级中男生和女生的平均年龄
– select gender,AVG(age) from t_student group by gender;
– select name,gender,AVG(age) from t_student group by gender;错误
– 当使用分组以后,查询的内容只能是分组的字段或者聚合函数
– 查询年龄大于19岁的男和女的平均成绩,并且平均成绩大约93分;
– select gender,avg(score) from t_student
– where age>19
– group by gender
– having avg(score)>93.5;
– 查询成绩大于90分的男生和女生,平均分大于94的各自人数
– select gender,count(id) from t_student
– where score>90
– group by gender HAVING avg(score)>95;
注意:where子句和having子句的区别
- where子句用在分组之前,并且不能使用聚合函数
- having子句用于对分组以后的内容进行判断,用在分组之后,可以使用聚合函数
- where子句先于分组和having先执行