mysql--SQL用法总结
mysql--SQL用法总结
一、建库建表
1、显示所有数据库 show databases;
2、创建数据库 create database 数据库名;
3、登陆数据库 mysql -h 127.0.0.1 -uroot -p
4、选择数据库 use 数据库名称;
5、删除数据库 drop database 数据库名称;
6、查看数据库 show database;
二、数据库表操作
1、创建表
create table 表名(id int(8), name varchar(12), sex int(3));
2、查看表结构
describe 表名;
3、查看表详细结构
show create table 表名;
4、修改表
A、更改字段数据类型
alter table 表名 modify name char(20) not null;
B、更改字段位置
alter table 表名 modify sex int(2) after id;
C、更改字段名称
alter table 表名 change sex 新名字 varchar(20);
D、删除表中字段
alter table user drop sex;
E、增加表中字段
alter table user add age int(3);
F、更改表名
alter table user rename student;
G、显示数据库中表名
show tables;
三、六种约束
1、非空约束
约束关键字:not null
非空字段创建:create table user (id int(4) not null );
2、主键约束
约束关键字:primary key
作用:使字段作为唯一标识,方便快速查询。
特性:唯一性,非空
单字段主键创建:create table hotel(name varchar(16) primary key,sex int(3) );
多字段主键创建:create table score(userid int(11) ,class int(11) , score int(3) primary key(userid,class));
3、外键
声明关键字:foreign key
作用:建立该表字段与父表的关联关系,被申明字段必须依赖与父表中存在的字段值,外键可以为空。
外键创建:create work(id int(6), constraint user_fk foreign key(id) references user(id) );
4、唯一约束
声明关键字:unique
作用:被声明字段不能重复,mysql唯一约束可以为空,SqlServer 唯一约束不能为空。
唯一约束创建:create table user (name varchar(16) unique);
5、默认值约束
声明关键字: default
作用:为字段指定默认值,若不插入值,将显示默认值。
默认值声明:create table user( sex char default 'man');
6、自增约束:
声明关键字:auto_increment
作用:声明字段为任何整数类型,通常和主键共通过声明。一个表中只能有一个字段为自增。
创建:create table user(id int(11) primary key auto_increment);
7、检查约束
声明关键字:check
作用:可以检查字段值的内容。
创建约束:create table user (name varchar(20),sex char(4) check '男' or '女' );
四、查询数据
基础查询
1、基础查询
select id ,name,sex from student;
2、limit:表示查询数据中起始行数和查询条数
select * from student limit 1,3;
3、in :查询数据中不相邻的多条数据
select * from student where name in('张三','李四');
4、or:查询不同列的数据,查询关系是或的关系,满足其中一个条件的结果都会显示
select * from student where department='计算机' or department='单片机';
5、and:查询关系是与的关系,必须同时满足and前后的条件才会显示。
select * from student where id='4' and sex='女';
6、between 查询某一区域的数据
select * from student where id between 2 and 4;
排序查询
7、正序排序
select * from student order by name;
8、倒序排序
select * from student order by name desc;
聚合函数
9、count:统计总个数
select department ,count(id) from student group by department;
10、max:统计最大值
select department,max(grade) from student group by department;
11、sum:分数求和
select name,sum(grade) from student group by name;
12、min:求最小值
select department,min(grade) from student group by department;
13、avg:求平均值
select name,avg(grade) from student group by name;
连接查询
14、并集:结果集1 union 结果集2 得到的2个集合并踢出重复数据
select name from student union select name from score;
15、交集:intersect
select * from student intersect select * from score;
16、差集 :返回第一个集合存在,第二个集合不存在。munus
select *from student minus select * from score;
子查询 一个查询结果是另一个查询的条件
17、 in:in的意思就是指定的一个值是否在这个集合中,如果在就返回TRUE;否则就返回FALSE了。
select * from stuent where id in(select stu_id from score where c_name='计算机' and grade<95);
18、any:any的意思比较好明白,直译就是任意一个,只要条件满足任意的一个,就返回TRUE。
好比“10 >any(11, 20, 2, 30)”,由于10>2,所以,该该判断会返回TRUE;只要10与集合中的任意一个进行比较,得到TRUE时,就会返回TRUE。
select * from student where id=any(select stu_id from score where stu_id in(select stu_id from score where c_name='计算机' and c_name='英语'));
select * from student where id>any(select stu_id from score where grade>90);
19、all:需要同时满足所有的内层查询条件
select * from student where id > all(select stu_id from score where grade>90);
20、exists :当子查询中有一个返回true,则外层开始查询
select * from student where id > exists(select grade from score where grade>90);
模糊查询
21、like:模糊查询,百分号通配符,匹配任意长度字符
select name from student where name like '%张%';
select name from student where name like '张%甜';
22、like:下划线通配符,一次只能匹配一个字符
select name from student where name like '张_';
空值查询
23、is null :查询字段为空的记录
select c_id,c_name,c_email from customer where c_email is null ;
24、is not null :查询字段不为空的记录
select c_id,c_name,c_email from customer where c_email is not null ;
结果去重
25、distinct 查询结果剔除重复数据
select distinct name from student;
分组查询
26、group by 对结果数据按照某个或多个字段进行分组
select name,count(name) from student group by name;
27、group_concat 只能与group by 共用,返回一个字符串结果,该结果由分组中的值连接组合而成,可以查询多个字段
SELECT c_name , GROUP_CONCAT(stu_id ) FROM score GROUP BY c_name;
------上面查询所有科目,并列出各科目的学生ID,得到结果如下:
c_name GROUP_CONCAT(stu_id )
中文 2,3
英语 6,1,5,4
计算机 5,4,2,1
28 having 对分组查询的结果进行过滤
select c_name,count(grade) from score group by c_name having count(grade)>30;
------上面查询统计每个课程的总成绩,并只显示在总成绩大于30的记录。
29、where和having共存时,where 放在group 不用前面, having必须放在group by 后面。
select c_name,count(grade) from score where stu_id=1 group by c_name having count(grade)>30; ;
------上面查询统计学生id为1的各科课程的总成绩,并只显示在总成绩大于30的记录。
30、with rollup:在所有查询出的分组记录之后,增加一列记录统计记录数之和
select c_name,count(grade) from score group by c_name with rollup;
31、多字段分组
select * from score group by c_name,grade;
32、分组排序
select c_name,count(grade) from score group by c_name having count(grade)>3 order by c_name;
连接查询
内连接:MySQL的内连接使用inner join on,它的效果跟使用where是一样的,如果联结的是两个表,那么需要左右的条件或者说字段是需要完全匹配的
select * from student inner join score on student.id=score.stu_id;
左连接:左连接的结果是除了匹配条件的数据还包含左边表中的所有数据
select * from student left join score on student.id=score.stu_id;
右连接:右连接的结果是除了匹配条件的数据还包含右边表中的所有数据
select * from student right join score on student.id=score.stu_id;
符合条件连接查询(连接查询中,限制查询结果)
select * from student inner join score on student.id=score.stu_id and score.stu_id=1;
select * from student inner join score on student.id=score.stu_id order by student.id;
文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。
原文链接:brucelong.blog.csdn.net/article/details/79598892
- 点赞
- 收藏
- 关注作者
评论(0)