数据库 | ||
创建数据库 | create database 数据库名称 [character set 字符集 collate 字符集校对规则]; | |
查看数据库服务器中所有的数据库 | show databases; | |
查看当前正在使用的数据库 | select database(); | |
查看某个数据库的定义信息 | show create database 数据库名称; | |
修改数据库 | alter database 数据库名称 character set 字符集 collate 校对规则; | |
删除数据库 | drop database 数据库名称; | |
切换数据库 | use 数据库名称; | |
表 (实体) | ||
创建表 | create table 表名称 (字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…); | |
查看某个数据库下的所有的表 | show tables; | |
查看某个表的结构信息 | desc 表名; | |
删除表 | drop table 表名; | |
修 改 表 结 构 | 添加列(字段) | alter table 表名 add 列名 类型(长度) 约束; |
删除列(字段) | alter table 表名 drop 列名; | |
修改列(字段)类型,长度和约束 |
| |
修改列(字段)名称 |
| |
修改表名 |
| |
修改表的字符集 |
| |
列 (字段) 以及 记录 (纵是列,行是记录) | ||
添加某几列数据 | insert into user(id,username,password) values(null,'aaa','123'); | |
添加所有列数据 | insert into user values(null,'bbb','123',23,'1993-09-01'); | |
修改表的记录 |
| |
修改某一列的所有值 | update user set password = 'abc'; | |
按条件修改数据 | update user set password = 'xyz' where username = 'bbb'; | |
按条件修改多个列 | update user set password = '123' , age = 34 where username='aaa'; | |
删除表的记录 |
| |
删除某一条记录 | delete from user where id = 2; | |
删除表中的所有记录 | delete from user; //dml语言可逆转 | |
删除表中的所有记录 | truncate table user; //ddl语言 不可逆转 |
记 录 ( 实 例 ) | ||
查看表的记录 | select [distinct] *|列名 from 表 [条件]; // “ |”是或者的意思,不是让你写 “*”代表所有列(所有字段或一条完整记录) “[ ]”表示里面东西可以省略不写 | |
查询所有学生考试成绩信息 | Select * from exam; | |
查询所有学生的姓名和英语成绩 | Select name , english from exam; | |
查询英语成绩信息 (不显示重复的值) | select distinct english from exam; | |
查看学生姓名和学生的总成绩 | Select name, english + chinese + math from exam; | |
别名查询 | select name,english+chinese+math as sum from exam; //as可省略 | |
as用法:加as相当于把as前的字段或表名赋给as后的字母来代替它,就像起个别名一样,作用就是看起来更简洁方便。 一般我们直接省略as,比如下面的c sc均是别名 :
|
“<>”:表示不等于
|
like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。 _只能代表一个字符, 而%可以代表任意个字符。 * like ‘李_’:名字中必须是两个字,而且是姓李的。 * like ‘李%’:名字中姓李的学生,李子后可以是1个或任意个字符。 * like ‘%四’:名字中以四结尾的。 * like ‘%王%’:只要名称中包含这个字就可以。 |
查询李四学生的成绩: | select * from exam where name = '李四'; |
查询名称叫李四学生并且英文大于90分 | select * from exam where name = '李四' and english > 90; |
查询姓李的学生的信息 | select * from exam where name like '李%'; |
查询英语成绩是69,75,89学生的信息 | select * from exam where english in (69,75,89); |
排序查询 |
|
查询学生信息,并且按照语文成绩 进行排序: | select * from exam order by chinese; |
查询学生信息,并且按照语文成绩 倒序排序: | select * from exam order by chinese desc; |
查询学生信息,先按照语文成绩进行倒序排序, 如果成绩相同再按照英语成绩升序排序 | select * from exam order by chinese desc , english asc; //同类字句,用逗号分开 |
查询姓李的学生的信息, 按照英语成绩降序排序 | select * from exam where name like '李%' order by english desc; //异类字句 用空格隔开。 |
同类多个字句规则加逗号“,”分开,where字句用and,or不能用“,” 异类多个字句规则加空格“ ”分开 |
聚合函数使用 | ||
sum(); | 获取所有学生的英语成绩的总和: | select sum(english) from exam; |
获取所有学生的英语成绩 和数学成绩总和 | select sum(english),sum(math) from exam; | |
查询姓李的学生的英语成绩的总和 | select sum(english) from exam where name like '李%'; | |
查询所有学生各科的 总成绩 | select sum(english)+sum(chinese)+sum(math) from exam; | |
select sum(english+chinese+math) from exam; | ||
上面两种方式正常情况,结果是一样的,但如果有数据为null结果就不一样了。 sum()函数可以识别null,运算时会把null作为0参与运算。 而如果直接用我们写的“+”,他不能识别null,null加任何数等于null,所以会把与它相加的数据丢失掉; 办法:使用ifnull( ,0)函数做给null值赋0值的处理,(下例假如English中含有null) Select sum(ifnull(english,0)+chinese+math) from exam; | ||
count(); | 获得学生的总数 | select count(*) from exam; |
获得姓李的学生的个数 | select count(*) from exam where name like '李%'; | |
max(); | 获得数学成绩的最高分: | select max(math) from exam; |
min(); | 获得语文成绩的最小值 | select min(chinese) from exam; |
avg(); | 获取语文成绩的平均值 | select avg(chinese) from exam; |
分组查询 | group by 字段名称 按什么统计字段名就是什么,分组后就不存在重复字段。 |
按商品名称统计, 每类商品所购买的个数: | Select product,count(*) from orderitem group by product; |
按商品名称统计, 每类商品所花费的总金额: | Select product,sum(price) from orderitem group by product; |
按商品名称统计, 统计每类商品花费的总金额在5000元以上的商品 | select product,sum(price) from orderitem group by product having sum(price) > 5000; |
按商品名称统计, 统计每类商品花费的总金额在5000元以上的商品, 并且按照总金额升序排序 | select product,sum(price) from orderitem group by product having sum(price) > 5000 order by sum(price) asc; |
where的子句中不能用聚合函数。 如果还想带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having来代替where。 规定格式:
|