SQL常用语句大全

SQL语句的类型

DDL(Data Definition Language)数据定义语言 DML(Data Manipulation Language)数据操作语言 DQL(Data Query Language)数据查询语言 DCL(Data Control Language)数据控制语言

MySQL逻辑表达

  1. 逻辑与(AND):用于将两个条件组合起来,要求它们同时成立。在 MySQL 中,逻辑与可以用 AND 关键字或 && 符号表示。

    SELECT * FROM table_name WHERE condition1 AND condition2;
    SELECT * FROM table_name WHERE condition1 && condition2;
  2. 逻辑或(OR):用于将两个条件组合起来,只要其中一个条件成立就返回结果。在 MySQL 中,逻辑或可以用 OR 关键字或 || 符号表示。

    SELECT * FROM table_name WHERE condition1 OR condition2;
    SELECT * FROM table_name WHERE condition1 || condition2;
  3. 逻辑非(NOT):用于对条件进行否定,即取反操作。在 MySQL 中,逻辑非可以用 NOT 关键字或 ! 符号表示。

    SELECT * FROM table_name WHERE NOT condition;
    SELECT * FROM table_name WHERE !condition;
  4. 逻辑异或(XOR):在 MySQL 中也支持逻辑异或运算,使用 XOR 关键字。当两个条件中有且仅有一个条件为真时,返回真;

    SELECT * FROM table_name WHERE condition1 XOR condition2;

这些逻辑运算符可以结合使用,以构建复杂的逻辑条件来过滤数据或进行判断。

DDL

DDL(Data Definition Language)数据定义语言

操作数据库
-- 创建库
create database 库名;
#库名别和sql语句重复不然后面会出错
​
-- 创建库时判断库是否存在,不存在则创建
create database if not exists 库名;
​
-- 查看所有数据库
show databases;
​
-- 使用指定数据库
use 库名;
​
-- 查看当前指定数据库包含的数据表
show tables;
​
-- 查看数据库的结构定义信息
show create database 库名;
​
​
-- 删除数据库
drop database 库名;
​
-- 修改数据库的字符集为utf8
alter database 库名 character set utf8;

操作数据表
​
-- 创建表
create table 表名(
字段1 类型1 属性 属性,
字段2 类型2 属性 属性,
字段3 类型3 属性 属性,
...........
​
-- 查看表结构
desc 表名;
-- 查看创建表的SQL语句
show create table 表名;
-- 修改表名
alter table 表名 rename to 新的表名;
rename table 表名  to 新的表名;s
    
-- 添加一个新的字段
alter table 表名 add 字段 字段类型 属性;
-- 修改字段名
alter table 表名 rename column 字段名 to 新的字段名;    
-- 修改字段类型(注意类型修改前后数据是否兼容)
alter table 表名 modify column 字段名 新的字段类型;
-- 删除一个字段
alter table 表名 drop 字段名;
-- 删除表
drop table 表名;
-- 删除表时判断表是否存在,若存在则删除
drop table if exists 表名;

DML

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

insert into(插入数据)
-- 有多少个字段,就要写多少个值,且是一一对应的
​
-- 全字段插入数据
insert into 表名 values(值1,值2,值3...值n);
-- 部分字段插入数据
insert into 表名(字段1,字段2...字段n) values(值1,值2...值n);
delete / truncate 删除数据
​
-- 删除表中所有数据
delete from 表名;   -- drop table 表名; 是连表一起删除
-- 删除表中指定的数据
delete from 表名 where 字段 = 值;  
-- 删除表中所有数据(先删除整张表,然后创建一张一样的空表,此方法更高效)
truncate table 表名;
updata 修改数据
-- 无限制条件的修改,会修改整张表
update 表名 set 字段 = 值;
-- 有限制条件的修改,只修改特定记录
update 表名 set 字段 = 值 where 条件(字段 = 值);

SQL

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

无条件查询
-- 查询表中所有数据
select *from 表名;

查询在...到...之间(between and / && / and)
-- 查询users表中年龄在18~25岁之间的记录
-- 方式1 between..and..
select *from users where age between 18 and 25;
-- 方式2 &&
select *from users where age>=18 && age<=25;
-- 方式3 and
select *from users where age>=18 and age<=25;

指定条件查询
-- 查询users表中年龄为18,20,25岁的记录
-- 方式1 or
select *from users where age=18 or age=20 or age=25;
-- 方式2 in
select *from users where age in(18,20,25);
​
-- 查询users表中年龄为23,性别为女,名字为小楠的记录
select *from users where age=23 and gender='女' and name='小楠'; 
查询NULL值
-- 查询id为空的
select *from users where id is null
​
-- 查询id不为空的
select *from users where id is not null
​

模糊查询(like)
--  _:单个任意字符
--  %:0个/多个任意字符
​
-- 查询users表中姓名第一个字为李的记录
select *from users where name like '李%';
​
-- 查询users表中姓名第二个字为李的记录
select *from users where name like '_李%';
-- 查询users表中姓名含有李字的记录
select *from users where name like '%李%';
-- 查询users表中姓名是两个字的记录
select *from users where name like '__'; 
SELECT DISTINCT name FROM users WHERE LENGTH(name) = 2;

去除重复记录查询(distinct)
-- 查询users表中所在城市不相同的记录
-- select distinct 字段 from 表名;
-- 去掉city 重复的部分
select distinct city from users;
-- users 表从不重复的name 中查询name 为两个字的
select distinct name from users where name like '__';
SELECT DISTINCT name FROM users WHERE LENGTH(name) = 2;

排序查询(order by)
-- 查询users表中记录,并以年龄升序排序
select *from users order by age asc;  -- asc默认升序
select *from test1 where age > 18 order by id;
-- 查询users表中记录,并以年龄降序排序
select *from users order by age desc; -- desc降序
​
-- 查询users表中记录,并体育成绩降序,年龄升序
select *from users order by PE desc,age asc;
select *from users order by PE desc,age desc;

聚合函数
  • 计算和(sum)

    -- 将求和后输出的字段以sumvalue展示 
    -- 默认以sum(字段)展示 
    -- 下面一样
    select sum(字段) as sumvalue from 表名;
    select sum(id) as ID,count(id) ID_count from users;
  • 计算最大值(max)

     select max(字段) as maxvalue from 表名;
  • 计算最小值(min)

    select min(字段) as minvalue from 表名;
  • 计算平均值(avg)

    select avg(字段) as avgvalue from 表名;
  • 计算个数(count)

    select count(字段) as totalcount from 表名;
分组查询(group by)
-- 只显示one column 分组后ave(PE)的值
select avg(PE) from users group by gender;
-- 查询users表中的记录,按照性别分组,查询男,女的体育成绩平均分
select gender,avg(PE) from users group by gender;
-- 和上一句差不多 只不过将显示gender的字段改为 unique_GD
-- avg(PE) 同理 改为 avg(pe)
select gender as unique_GD,avg(PE) as avg(pe) from users group by gender
​
​
-- 查询users表中的记录,按照性别分组,分别查询男、女的体育成绩平均分,人数
select gender, avg(PE),count(id) from users group by gender;
​
​
-- 查询users表中的记录, 按照性别分组,分别查询男、女的体育成绩平均分,人数 要求:分数低于60分的人,不参与分组
select gender, avg(PE),count(id) from users where PE > 60 group by gender; 
​
​
-- 查询users表中的记录,按照性别分组,分别查询男、女的体育成绩平均分,人数 要求:分数低于60分的人,不参与分组,分组之后,人数要大于2个人
select gender,avg(PE),count(id) from users where PE > 60 group by gender having count(id)>2;

分页查询(limit)
-- 查询users表中满足id < 100的前10行条记录
select *from users where id < 100 limit 10;
​
​
-- 查询users表中第2~11条记录 (从第2条记录开始累加10条记录)
select *from users limit 1,10;
​
-- 查询users表中第5~17条记录 (从第5条记录开始累加13条记录)
select *from users limit 4,13;

**内连接查询

如果查询数据的来源来自多张表,则必须对这些表进行连接查询,连接是把不同表的记录连到一起的最普遍的方法,通过连接查询可将多个表作为一个表进行处理,连接查询分为内连接和外连接。

  • 字段的顺序会影响查询后输出的顺序

  • 如果用 * 代替 那么会按后面 from 的顺序输出

-- 语法1 (隐式内连接)
select 字段1,字段2...
from 表1,表2...
where 过滤条件;
 
 -- test1 的字段全都显示出来,test2只显示name字段为了区分这里将name 改为 test2.name;  
 -- 条件是 test1.id = test2.id;
 select test1.*,test2.name as test2.name from test1,test2 where test1.id = test2.id;
 
-- 语法2 (显式内连接)
select 字段1,字段2...
from 表1 inner join 表2 ...
on 过滤条件;
**外连接查询
  • 左外连接:是表1和表2的交集再并上表1的其他数据

  • 右外连接:是表1和表2的交集再并上表2的其他数据

  • 那个方向连接就以那个方向为主,无论查询结果如何都会显示整个表

  • 字段的顺序会影响查询后输出的顺序

  • 如果用 * 代替 那么会按后面 from 的顺序输出

-- 左外连接
select 字段1,字段2..
from 表1 left (outer) join 表2 on 过滤条件;
​
-- () 可以省略
​
-- 右外连接
select 字段1,字段2..
from 表1 right (outer) join 表2 on 过滤条件;

DCL

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

管理用户
​
-- 添加用户
create user '用户名'@'主机名' identified by '密码';
-- 删除用户
drop user '用户名'@'主机名';
-- 查询所有用户
SELECT user, host FROM mysql.user;
-- 查询所有用户 本且显示所有权限
SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS sql_statements
FROM mysql.user;
权限管理
-- 查询权限
show grants for '用户名'@'主机名';
​
-- 授予权限
-- 语法
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-- 授予faker用户所有权限,在任意数据库任意表上
grant all on *.* to 'faker'@'localhost';
​
-- 撤销权限
-- 语法
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
-- 撤销faker用户对test数据库中city数据表的权限
revoke update on test.city from 'faker'@'localhost';
​
权限列表
  1. SELECT: 允许用户查询(检索)数据库中的数据。

  2. INSERT: 允许用户将新数据插入到数据库表中。

  3. UPDATE: 允许用户修改数据库表中已有的数据。

  4. DELETE: 允许用户从数据库表中删除数据。

  5. CREATE: 允许用户创建新的数据库和表。

  6. DROP: 允许用户删除数据库和表。

  7. ALTER: 允许用户修改数据库表结构。

  8. GRANT OPTION: 允许用户将自己拥有的权限授予给其他用户。

  9. ALL PRIVILEGES: 给予用户所有可用的权限。

  10. CREATE USER: 允许用户创建新用户账号。

  11. RELOAD: 允许用户重新加载访问控制表或刷新服务器缓存等。

  12. SHOW DATABASES: 允许用户查看数据库列表。

  13. SHUTDOWN: 允许用户关闭数据库服务器。

  14. PROCESS: 允许用户查看正在运行的进程。

  15. FILE: 允许用户在服务器上读写文件。

  16. EXECUTE: 允许用户执行存储过程。

  17. INDEX: 允许用户创建或删除索引。

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值