ToB企服应用市场:ToB评测及商务社交产业平台

标题: SQL常用语句大全 [打印本页]

作者: 来自云龙湖轮廓分明的月亮    时间: 2024-6-21 13:42
标题: SQL常用语句大全
我们在进行开发工作时,对数据库的操纵是必不可少的,纯熟把握SQL语句可以让我们对数据库的数据处理变得非常简单,以是学习SQL语句是非常有必要的,下面汇总了一些常用的SQL语句

SQL语句的类型

DDL(Data Definition Language)数据界说语言

DML(Data Manipulation Language)数据操纵语言

DQL(Data Query Language)数据查询语言

DCL(Data Control Language)数据控制语言

DDL

DDL是数据界说语言,主要是对数据库和数据表的操纵
(1)操纵数据库

  1. --创建库
  2. create database 库名;
  3. --创建库时判断库是否存在,不存在则创建
  4. create database if not exists 库名;
  5. --查看所有数据库
  6. show databases;
  7. --使用指定数据库
  8. use 库名;
  9. --查看当前指定数据库包含的数据表
  10. show tables;
  11. --查看数据库的结构定义信息
  12. show create database 库名;
  13. --删除数据库
  14. drop database 库名;
  15. --修改数据库的字符集为utf8
  16. alter database 库名 character set utf8;
复制代码
(2)操纵数据表

  1. --创建表
  2. create table 表名(
  3. 字段1 类型1,
  4. 字段2 类型2,
  5. 字段3 类型3,
  6. ...........
  7. );
  8. --查看表结构
  9. desc 表名;
  10. --查看创建表的SQL语句
  11. show create table 表名;
  12. --修改表名
  13. alter table 表名 rename to 新的表名;
  14. --添加一个新的字段
  15. alter table 表名 add 字段; 字段类型;
  16. --修改字段名
  17. alter table 表名 rename column 字段名 to 新的字段名;
  18. --修改字段类型(注意类型修改前后数据是否兼容)
  19. alter table 表名 modify column 字段名 新的字段类型;
  20. --删除一个字段
  21. alter table 表名 drop 字段名;
  22. --删除表
  23. drop table 表名;
  24. --删除表时判断表是否存在,若存在则删除
  25. drop table if exists 表名;
复制代码
DML

DML是数据操纵语言,主要是对数据表的操纵
(1)插入数据(insert into)

数据表插入数据分为全字段插入数据和部分字段插入数据
①全字段插入数据(有两种方法,保举第一种方法)
  1. --有多少个字段,就要写多少个值,且是一一对应的
  2. insert into 表名 values(值1,值2,值3...值n);
  3. --此方法要写出所有字段,并一一对应插入值
  4. insert into 表名(字段1,字段2...字段n) values(值1,值2...值n);
复制代码
②部分字段插入数据
  1. --部分字段插入数据,只写需要插入数据的字段名
  2. insert into 表名(字段1,字段2...) values(值1,值2...);
复制代码
(2)删除数据(delete / truncate)

  1. --删除表中所有数据
  2. delete from 表名;
  3. --删除表中指定的数据
  4. delete from 表名 where 字段 = 值;
  5. --删除表中所有数据(先删除整张表,然后创建一张一样的空表,此方法更高效)
  6. truncate table 表名;
复制代码
(3)修改数据(update)

  1. --无限制条件的修改,会修改整张表
  2. update 表名 set 字段 = 值;
  3. --有限制条件的修改,只修改特定记录
  4. update 表名 set 字段 = 值 where 条件(字段 = 值);
复制代码
 DQL

DQL是数据查询语言,主要就是select共同其他限制条件的关键字进行查询
(1)无条件查询

  1. --查询表中所有数据
  2. select *from 表名;
复制代码
(2)查询在...到...之间(between and / && / and)

  1. --查询users表中年龄在18~25岁之间的记录
  2. --方式1 between..and..
  3. select *from users where age between 18 and 25;
  4. --方式2 &&
  5. select *from users where age>=18 && age<=25;
  6. --方式3 and
  7. select *from users where age>=18 and age<=25;
复制代码
(3)指定条件查询

①单个条件(or / in)
  1. --查询users表中年龄为18,20,25岁的记录
  2. --方式1 or
  3. select *from users where age=18 or age=20 or age=25;
  4. --方式2 in
  5. select *from users where age in(18,20,25);
复制代码
②多个条件(and)
  1. --查询users表中年龄为23,性别为女,名字为小楠的记录
  2. select *from users where age=23 and gender='女' and name='小楠';
复制代码
(4)查询不为NULL值(is not null),为NULL值(is null)

  1. --查询users表中序号不为空的记录
  2. select *from users where id is not null;
  3. --查询user表中序号为空的记录
  4. select *from users where id is null;
复制代码
(5)模糊查询(like)

  1. _:单个任意字符
  2. %:多个任意个字符
  3. --查询users表中姓名第一个字为李的记录
  4. select *from users where name like '李%';
  5. --查询users表中姓名第二个字为李的记录
  6. select *from users where name like '_李%';
  7. --查询users表中姓名含有李字的记录
  8. select *from users where name like '%李%';
  9. --查询users表中姓名是两个字的记录
  10. select *from users where name like '__';
复制代码
(6)去除重复记载查询(distinct)

  1. --查询users表中所在城市不相同的记录
  2. --select distinct 字段 from 表名;
  3. select distinct city from users;
复制代码
(7)排序查询(order by)

①单个条件
  1. --查询users表中记录,并以年龄升序排序
  2. select *from users order by age; --默认升序
  3. --查询users表中记录,并以年龄降序排序
  4. select *from users order by age desc;--desc降序
复制代码
②多个条件
留意:多个排序条件时,只有当第一个排序条件值一样,才会实行第二个排序条件,以此类推
  1. --查询users表中记录,并体育成绩降序,年龄降序
  2. select *from users order by PE desc,age desc;
复制代码
(8)聚合函数

①计算和(sum)
  1. select sum(字段) (as sumvalue) from 表名;
复制代码
②计算最大值(max)
  1. select max(字段) (as maxvalue) from 表名;
复制代码
③计算最小值(min)
  1. select min(字段) (as minvalue) from 表名;
复制代码
④计算平均值(avg)
  1. select avg(字段) (as avgvalue) from 表名;
复制代码
⑤计算个数(count)
  1. select count(字段) (as totalcount) from 表名;
复制代码
(9)分组查询(group by)

  1. --查询users表中的记录,按照性别分组,查询男,女的体育成绩平均分
  2. select gender,avg(PE) from users group by gender;
  3. --查询users表中的记录,按照性别分组,分别查询男、女的体育成绩平均分,人数
  4. select gender, avg(PE),count(id) from users group by gender;
  5. --查询users表中的记录, 按照性别分组,分别查询男、女的体育成绩平均分,人数 要求:分数低于60分的人,不参与分组
  6. select gender, avg(PE),count(id) from users where PE > 60 group by gender;
  7. --查询users表中的记录,按照性别分组,分别查询男、女的体育成绩平均分,人数 要求:分数低于60分的人,不参与分组,分组之后,人数要大于2个人
  8. select gender,avg(PE),count(id) from users where PE > 60 group by gender having count(id)>2;
复制代码
(10)分页查询(limit)

留意:第一条记载的索引是0
  1. --查询users表中的前10行条记录
  2. select *from users limit 10;
  3. --查询users表中第2~11条记录 (从第2条记录开始累加10条记录)
  4. select *from users limit 1,10;
  5. --查询users表中第5~17条记录 (从第5条记录开始累加13条记录)
  6. select *from users limit 4,13;
复制代码
(11)内连接查询

如果查询数据的来源来自多张表,则必须对这些表进行连接查询,连接是把差异表的记载连到一起的最广泛的方法,通过连接查询可将多个表作为一个表进行处理,连接查询分为内连接和外连接
语法格式
  1. --语法1 (隐式内连接)
  2. select 字段1,字段2...
  3. from 表1,表2...
  4. where 过滤条件;
  5. --语法2 (显式内连接)
  6. select 字段1,字段2...
  7. from 表1 inner join 表2 ...
  8. on 过滤条件;
复制代码
例如这里有两张表: user表和city表

 重合的部分就叫做内连接查询,例如下面过滤条件指的就是当两个表的id相称时才符合连接查询的条件
隐式内连接

显式内连接

 (12)外连接查询

外连接查询分为左外连接查询和右外连接查询
语法
  1. --左外连接
  2. select 字段1,字段2..
  3. from 表1 left (outer) join 表2 on 过滤条件;
  4. --右外连接
  5. select 字段1,字段2..
  6. from 表1 right (outer) join 表2 on 过滤条件;
复制代码
区别如下
左外连接:是表1和表2的交集再并上表1的其他数据
右外连接:是表1和表2的交集再并上表2的其他数据
举个例子,例如还是上面两张表,user表和city表

左外连接结果

右外连接结果

看到结果大家明确左,右外连接的区别了吗,在实际应用中,我们要结合实际的需求来决定使用左外连接还是右外连接
  (13)子查询

子查询:实在就是查询语句中嵌套查询语句
例如还是刚才的user表,只不外新增了一个字段age

问题:查找出表中年龄最大的谁人人的那条记载
通例想法:
①先计算出年龄最大的值 

②根据已知年龄的最大值查找相干记载

如许必要两条sql语句,乃至如果遇到更复杂的问题,必要更多sql语句
利用子查询:
而子查询只必要用一条sql语句就够了 

子查询的查询结果是可以作为判定条件的
如果子查询结果是单行单列的,可以用运算符做判定条件:< <= > >= =
例如还是user表,查找小于最大年龄的所有记载

如果子查询结果是多行单列的,可以用运算符in做判定条件
子查询查找出了最小年龄者的姓名,然后作为判定条件输出这些人的记载

DCL

(1)管理用户

①添加用户
  1. create user '用户名'@'主机名' identified by '密码';
复制代码
②删除用户
  1. drop user '用户名'@'主机名';
复制代码
 (2)权限管理

 ①查询权限
  1. show grants for '用户名'@'主机名';
复制代码
②授予权限
  1. --语法
  2. grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
  3. --授予faker用户所有权限,在任意数据库任意表上
  4. grant all on *.* to 'faker'@'localhost';
复制代码
③撤销权限
  1. --语法
  2. revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
  3. --撤销faker用户对test数据库中city数据表的权限
  4. revoke update on test.city from 'faker'@'localhost';
复制代码
看完文章对你有资助的话,就点个赞吧~
点赞关注收藏是对我最大的支持~ 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4