用途
1. 查看系统运行的结果
2. 插入数据
insert into 表名 values(``````````值)
SQL语句
与数据库(RDBMS)对话的工具
关系型数据库:DB2,mysql,Oracle
非关系型数据库:NoSql-redis
DDL数据定义语句
创建表
‘字段名’ 数据类型(长度)
DML数据操作语句
1. insert 添加
- 向表中插入一行
insert into 表名(字段名1,字段名2,字段名3)values('值1'),('值2'), ('值3')
- 向表中插入多行
INSERT INTO 表名(字段名1,字段名2,字段名3)
VALUES
(('值1'),('值2'), ('值3') ),
(('值1'),('值2'), ('值3'));
- 将行从一个表复制到另一个表中。
INSERT INTO 表名
SELECT *FROM 表名;
2. update 修改
UPDATE 表名
SET 列名1 = 修改为的值1,
列名2 = 修改为的值3
WHERE
条件;
3. 删除
- delete删除
delect from 表名 where 筛选条件
- truncate (是删除整张表)
truncate table 表名;
DQL数据查询语句
- select [distinct] 有 distinct是去重,无distinct是没有去重
- 字段 列名 字段列表是使用英文逗号来进行分割
- from 表名 关键字后跟表的,可以是多个表名称或视图名称;
- where 条件 (按索引查询比较快)
- group by 分组查
- having 分组查询的交件
- order by 用于数据显示排序
- asc 表示升序,它是默认值
- desc 表示降序
- limit 用于分页显示,它有两个参数,第一个参数是起始值,第二个参数是显示的数量
单表查询
算术运算符
- 算术运算符: + - * / (除也可以写成 div , div 取整 ) % (取模可以写成 mod )
-- 例如:
-- 1、选出id为奇数的数据
select*from 表名where id%2=1
-- 2、选出id除以2等于1的数据
select*from 表名where id/2=1
比较运算符
- 比较运算符: = > >= < <= != (不等于还可以写成 <> ) <=> (安全等于)
(用做 null 查询时,不能使用 = 来匹配 null 值,而是要使用 is 来进行匹配。
(1) is :匹配等于
(2)is not :匹配不等于)
例如
-- 1、查询基本工资不等于 10000
select * from 表名 where basic_salary != 10000;
-- 2、 查询 commission_pct 等于 null 数据
select * from t_salary where commission_pct = null;
逻辑运算符
- 逻辑运算符包括与( && )、或( || )、非( not )操作。
-- 1、查询性别为男,并且在 1990 年1月2日 以前出生的员工
select * from t_employee where gender='男' and birthday < '1990-01-02';
或
select * from t_employee where gender='男' && birthday < '1990-01-02';
-- 2、查询职位编号 job_id 是 1 或 2 的员工
select * from t_job where job_id=1 or job_id=2;
或
select * from t_job where job_id=1 || job_id=2;
范围和集合
- 范围查询需要使用到 between…and… 来查询,而集合就需要使用 in 或 not in 来查询。
-- 1、查询基本薪资在 9000~12000 之间的员工编号和基本薪资
select * from t_salary where basic_salary between 9000 and 12000;
或
select * from t_salary where basic_salary>=9000 and basic_salary<=12000;
-- 2、查询 eid 的值为 1、3、5的基本薪资。
select * from t_salary where eid=1 or eid=3 or eid=5;
或
select * from t_salary where eid in (1,3,5);
模糊查询
- 模糊查询需要使用 like 关键字,也可使用 not like 来进行查询。要模糊查询中,我们还可以使用
通配符:
- % :表示 0 ~ n 个字符
- _ :表示一个字符
-- 1、我们可以查询以 ' 孙 ' 开头的员工。
select * from t_employee where ename like '孙%';
-- 2、姓名是以 孙 开头的员工信息。
select * from t_employee where ename like '孙_';
-- 3、姓名是有孙 字的员工信息。
select * from t_employee where ename like '%孙%';
统计查询
- 在 SQL 中,统计查询一般会用到如下几种:
- sum() :用于求和统计
- avg() :用于求平均值
- count() :用于获取总记录数
- max() :用于获取最大值
- min() :用于获取最小值
-- 1、查询员工的平均工资。
select avg(basic_salary) as '平均工资' from t_salary;
-- 2、获取工资表中最高的工资。
select max(basic_salary) as '最高工资' from t_salary;
-- 3、获取工资表中最低的工资
select min(basic_salary) as '最低工资' from t_salary;
-- 4、获取所有员工的工资总和
select sum(basic_salary) as '工资总和' from t_salary;
-- 5、获取员工总数
select count(*) as '员工总数' from t_salary;
(使用 count() 来进行查询时,参数不能为空。参数可以是数字、字符、星号、某个字段,结果都一样。)
分页查询(limit)
-- 分页显示员工信息,每页显示 2 名员工。
-- 第一页的数据 :
select eid,ename,gender,tel,birthday from t_employee limit 0, 2;
-- 第二页的数据:
select eid,ename,gender,tel,birthday from t_employee limit 2, 2;
-- 第三页数据:
select eid,ename,gender,tel,birthday from t_employee limit 4, 2;
分组查询
- 分组查询需要使用 group by 关键字来进行分组,还可以能使用 having 关键字来进行条件筛选。
分组查询详解
排序查询
- 排序查询会使用到 order by 关键字,还会使用到 asc 或 desc 关键字。
-- 1、查询所有员工信息,并按员工的编号的降序序进行显示
select eid,ename,gender,tel,birthday
from t_employee
order by eid desc ;
-- 2、查询所有员工信息,并按员工的编号的升序进行显示
select eid,ename,gender,tel,birthday from t_employee
order by eid asc;
或
-- order by 默认升序
select eid,ename,gender,tel,birthday from t_employee
order by eid;
子查询
where 型子查询:把子查询作为 where 的条件(条件)
-- 1、查询比孙红雷的工资高的员工信息
select eid,ename,gender,tel
from t_employee
where eid in (
select eid
from t_salary
where basic_salary > (
select basic_salary
from t_employee e, t_salary s
where e.ename='孙红雷' and e.eid=s.eid
)
);
from 型子查询:把子查询作为 from 的临时表(数据)
-- 1、查询出比部门平均工资高的员工编号和基本工资
select te.eid, te.ename, basic_salary
from t_salary ts join t_employee te
on ts.eid=te.eid
join (
select dept_id, avg(basic_salary) as avg_salary
from t_employee e, t_salary s
where e.eid=s.eid
group by dept_id
) as temp
on te.dept_id=temp.dept_id
where ts.basic_salary > temp.avg_salary;
exists 型子查询:把子查询作为判断是否存在的条件(条件)
-- 1、查询必须有员工的部门信息
select did,dname,description
from t_department
where exists(
select eid,ename,gender,dept_id
from t_employee
where dept_id is not null
);
copy 型子查询:用于复制表数据或结构
-- 1、 复制表的结构
create table 表名 like 被复制的表名;
-- 2、复制表结构和数据
create table 表名 as (select * from 被复制的表名);
-- 3、添加查询的数据
insert into 复制后的表名 select * from 被复制的表名;
-- 4、跨数据库复制
create table 表名 like 被复制数据库名.被复制的表名;
create table 新数据库名.表名 like 被复制数据库名.被复制的表名;
-- 5、复制表中部分字段和数据
create table 表名 as (
select 要复制的字段列表
from 被复制的表名
where 条件
)
-- 6、在创建表的同时定义表的字段
create table 表名(
字段名 类型(长度) [主键][自增][非空][默认值][注释]
) as (
select 被复制的字段 from 被复制的表名
)
多表查询
笛卡尔,交叉查询
内关联查询
左外关联查询
SELECT * FROM table_A LEFT JOIN table_B ON a_user_id = b_user_id;
右外关联查询
SELECT * FROM table_A RIGHT JOIN table_B ON a_user_id = b_user_id;
特殊的DQL
自关联查询
关联查询(内、外关联都可以),条件是关联的表的同一个表
union组合查询
select 列名1,列名2,列名3,···· from 表名1
left 表名2 on 表名1。字段名=表名2.字段名
union
select 列名1,列名2,列名3,···· from 表名1
right 表名2 on 表名1。字段名=表名2.字段名
常用函数
分组函数
数字相关函数
字符串相关函数
日期相关函数
逻辑函数
DCL数据控制语句,grant
DCL(Data Control Language)是数据库管理系统中的一种语言类型,主要用于定义数据库对象的访问权限和管理用户的访问权限。其中,GRANT是DCL中常用的一种语句,用于授权用户或用户组对数据库对象进行操作。
GRANT语句可以授权对指定对象执行SELECT、INSERT、UPDATE、DELETE等操作,并且可以限制授权的范围,例如指定具体的表或者列名等。GRANT语句的语法如下:
GRANT privileges ON object TO user;
其中,privileges指要授予的操作权限,object指要授权的对象,可以是表、视图或者其他数据库对象,user指要授权的用户或用户组。例如,以下语句授予用户tom对数据库中的表student执行SELECT和INSERT操作的权限:
GRANT SELECT, INSERT ON student TO tom;
此外,GRANT语句还可以使用WITH GRANT OPTION选项,表示授权的用户可以将其授权给其他用户,具有一定的风险性,需要谨慎使用。
总之,GRANT语句是数据库管理中常用的一种授权语句,可以控制用户对数据库对象的操作权限,保障数据库的安全性和稳定性。
DCL数据事务语句,commit rollback
DCL(Data Control Language)是数据库管理系统中的一种语言类型,用于管理数据库对象的访问权限。与之相对的是DML(Data Manipulation Language),用于数据库对象的操作,例如SELECT、INSERT、UPDATE、DELETE等。
DCL中还包括数据事务语句,主要用于控制数据库事务的提交和回滚,确保数据的一致性和完整性。其中,COMMIT和ROLLBACK是最常用的两个事务控制语句。
COMMIT语句用于将当前事务提交到数据库,使得之前对数据库进行的所有操作永久保存。如果提交成功,所有事务内的修改操作将被更新到数据库,否则将回滚到事务开始前的状态。COMMIT语句的语法如下:
COMMIT;
ROLLBACK语句用于撤销当前事务中的所有操作,并且将数据库恢复到事务开始前的状态。ROLLBACK语句的语法如下:
ROLLBACK;
通常,COMMIT和ROLLBACK语句在一个事务结束时使用,以保证数据的一致性和完整性。在数据库管理中,事务控制是非常重要的,因为它可以避免数据的损坏和丢失,保证了数据库的安全和稳定。
总之,COMMIT和ROLLBACK语句是DCL中常用的两种事务控制语句,可以控制事务的提交和回滚,保证了数据的一致性和完整性。