-
操作数据之插入数据
对表的操作:插入,更新,删除
1.单条数据插入
--1)
insert (into) 表名(列名,列名......)
values(值,值......)
--2)
insert 表名(列名......)
select 值......
2.多条插入
一次性插入多条 批量插入操作
--1)
insert into 表名(列名1,列名2......)
values (值1,值2......),(值1,值2......),(值1,值2......)......
--2)union去除,union all允许重复
union all 效率比 union 高
insert 表名(列名1,列名2......)
select (值1,值2......) union
select(值1,值2......) union
......
select(值1,值2......)
3.克隆表数据
将一张表的数所复制到另一张表
--1)目标表在数据库中已经存在
insert into 目标表名(目标表中列名)
select 源表中列名 from 源表
--2)目标表之前数据库中不存在,执行操作时自动创建
select 源表中列名 into 新表--目标表
from 源表
-
操作数据之更新删除数据
1.更新数据 update
update 表名 set 列名=值,列名=值
where 标识列=值 (and | or)条件
--修改的某一列
注:主键不可以修改
如果不加where条件,会把整个表的数据都修改了
2.删除数据
--1)只是删除数据,表还在
1.delete from 表名
delete from 表名
where 条件
----不加条件,会删除整个表数据,几乎都要where,加where条件 标识列 值还是接着删除前的值而自增。(假设删除的标识列为:6,7,8,删除后再添加列,标识列从9开始)
--delete 语句会造成标识列的值不连续
如果想要删除数据,让标识列的值恢复到初始值:
2.truncate table 表名(不带条件)
truncate table 表名
---表数据清空,恢复到初始化,标识列也恢复
--truncate 效率比delete 高,delete每删除一条数据,都会在日志里记录,truncate不会记录日志,不激活触发器,drop,truncate是即时操作,不可恢复。
--慎用truncate一旦删除,不能恢复。
-
查询数据之单表查询
--1.查询所有数据
--*表示所有列
select * from 表名
-- 2.查询表的部分数据
select 列名1,列名2......
from 表名
where 条件
--3. 列命别名
--列名 AS 别名
--列名 别名
--别名 = 列名
--4.排序 order by
select 列名1,列名2......
from 表名
order by 列名 asc
--主键默认就有排序功能,从小到大
--asc 升序,从小到大
--desc 降序,从大到小
--多个字段排序,用逗号隔开
--条件,分组在前,order by 永远在后
-
查询之模糊查询
select 列名
from 表名
where 列名 like .....
匹配模式:
1. % 0个或多个
like '%2%' 包含2
like '%4' 以4结尾
like ' 2%' 以2开头
2. _ 匹配单个字符
一个'_'一个字符,限制表达式的字符长度
3.[ ] 范围匹配,括号中所有字符中的一个
[mnd] 匹配到字符中有m,n,d中任意一个
[1-9] 匹配到有1-9数字中任意一个的字符
4.[^] 不在括号中所有字符之内的单个字符
[^mnd] 匹配到字符中没有m,n,d的
[^1-9] 匹配到没有1-9数字的字符
-
查询之范围查询
1.select from where 子句 条件--给定范围
--1)比较运算符
> < >= <=
--2) in( )/ not in ( )
in(2,3,4) 在2,3,4范围内
not in(2,3,4) 不在2,3,4范围内
in(子查询) 在查询的结果范围内
--3)between and
--在20-30范围内
--between 20 and 30
--ID >= 20 and <=30
2.前面多少条,百分比
--前10条
select top 10 *
from 表名
--前10%
select top 10 percent *
from 表名
-
聚合函数
聚合函数:对一组值执行计算并返回单一的值。
select count(*) from 表名
select count(1) from 表名-----一般统计一个表的记录数
--select count(1)伪造列
--count 记录个数
--sum 求和,相加
--avg 求平均
--max 求最大
--min 求最小
-
分组查询group by
语法:
select ......where...... group by ...... having..... order by .....
--group by结合聚合函数,根据一列或多个列对结果集进行分组。
--having 分组后的筛选条件
--select 列名,count(1) 用户数
--from 表名
--group by 列名
-
连接查询
连接查询: 根据两个或多个表之间的关系,从这些表中查询数据.
目的: 实现多表查询
分类: 内连接, 外连接, 全连接, 交叉连接
-
内连接
inner join 使用比较运算符 = > < >= <= 进行表间的比较,查询与条件相匹配的数据.
本质上是等值连接 , 结果: 相匹配的数据查询出来,显示匹配出来的结果,如果没有匹配上,就没有结果.
显式连接
inner join on 关联条件
表 inner join 表 on 条件 where
select 列名
from 表1
inner join 表2 on 关联条件 -- and ...
隐式连接
select ...... from 表,表 where 关联条件
select *
from 表1,表2
where 关联条件
-
外连接
外连接分类: 左外连接, 右外连接, 全外连接
1. 左连接 left (outer) join
结果: 左表: 所有行
右表: 行数与左表相同,没有匹配上的,显示NULL
select * from 左表
left join 右表
on 关联条件
2. 右连接 right (outer) join
结果: 左表: 行数与右表相同,没有匹配上的,显示NULL
右表: 所有行
select * from 左表
right join 右表
on 关联条件
3.全连接 full (outer ) join
结果: 左表和右表所有数据都会出来, 每一行的数据, 如果在另一个表里匹配不上, 就是对应显示NULL
select * from 表1
full join 表2
on 关联条件
4.交叉连接 cross (outer) join
如果不带where 子句时,返回被连接的两个表的笛卡尔积, 返回的行数 是两个表行数的乘积.
select * from 表1
cross join 表2 --不带where的显示为表的行数乘积
where 关联条件 --只显示匹配出来的行数