mysql--SQL用法总结

举报
brucexiaogui 发表于 2021/12/30 01:46:09 2021/12/30
【摘要】 mysql--SQL用法总结 一、建库建表 1、显示所有数据库    show databases; 2、创建数据库    create database 数据库名; 3、登陆数据库    mysql -h 127.0.0.1 -uroot -p 4、选择数据库 &n...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。