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先执行