一、数据查询
1、基本查询语句
select c.name, c.pass_word as pw from cc_user c
注意点:别名可以用as 也可以直接空格
2、 查询去重
select distinct c.name, c.pass_word as pw from cc_user c
注意点:name 和 pass_word 全部相同时才会去重,若只有 name 相同,pass_word 不相同则认为是不重复的。
3、加号
SELECT '123'+10 ; 输出 133 , '123' 会转换位数字
SELECT 'a'+10 ; 输出 10, 'a' 转会不成数字,会当作 0
SELECT null+10 ; 只要有 null ,输出结果则为null
二、过滤条件及排序
1、where
SELECT * from cc_user u where u.name = 'test'
2、运算符
简单条件运算符:> < = != <> >= <=
3、逻辑表达式
&& 和 and:两个条件都为 true,结果为 true,反之为 false
|| 或 or: 只要有一个条件为 true,结果为 true,反之为 false
! 或 not: 如果连接的条件本身为 false,结果为 true,反之为 false
4、like
SELECT * from cc_user u where u.name LIKE '%e_t'
注意:通常与通配符一起使用,% :通配任意长度字符串。_ :通配单一任意字符
5、between and
SELECT * from cc_user u where u.id between 2 and 3
特点:简洁、包含临界值、前后临界值不能更换
6、in
SELECT * from cc_user u where u.id in (2,3)
7、is null 及 is not null
SELECT * from cc_user u where u.money is null
SELECT * from cc_user u where u.money is not null
8、安全等于 <=>
SELECT * from cc_user u where u.money <=> null
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
9、order by 排序子句
SELECT * from cc_user u where u.money is not null ORDER BY u.id DESC
SELECT * from cc_user u where u.money is not null ORDER BY u.id ASC
DESC : 降序 ;ASE :升序
三、分组查询
1、分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
效率:MYISAM 存储引擎下 ,COUNT() 的效率高; INNODB 存储引擎下,COUNT() 和COUNT(1) 的效率差不多,比 COUNT (字段)要高一些。
常用函数:
求和:sum()
求平均值:avg()
求最大值:max()
求最小值:min()
计算个数:count()
特点:
sum、avg一般用于处理数值型 max、min、count可以处理任何类型
以上分组函数都忽略null值
可以和distinct搭配实现去重的运算
count函数的单独介绍一般使用count(*)用作统计行数
和分组函数一同查询的字段要求是group by后的字段
示例:
select sum(id) from cc_user;
select avg(id) from cc_user;
select max(id) from cc_user;
select min(id) from cc_user;
select count(id) from cc_user;
2、分组查询
语法:
select 查询列表 from 表 【where 筛选条件】 group by 分组的字段 【order by 排序的字段】;
group by 与 having 使用:
select sum(id) from cc_user u GROUP BY u.name HAVING sum(id) > 3
四、多表查询
连接查询分类:
内连接: 等值连接 非等值连接 自连接
外连接: 左外连接 右外连接 全外连接
交叉连接
区别:
内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
示例:
内连接 :SELECT * FROM TESTA,TESTBWHERE TESTA.A=TESTB.A
结果:
外连接:SELECT *FROM TESTA LEFT OUTER JOIN TESTB ON TESTA.A=TESTB.A
结果:
五、常见函数
1.字符函数
2、数字函数
3、日期函数
六:流程控制 CASE 表达式
示例:
select u.id id,
case u.id
when 1 then 'A'
when 2 then 'B'
else 'C'
end '标注'
from cc_user u
七:分页:
语法 select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
八、DML(增删改)
插入数据:insert into cc_user(name, pass_word) VALUES('cc', 123456)
删除数据:delete from cc_user where id = 4
修改数据:update cc_user u set u.money = 100000 where u.id = 1
九、视图
1、创建视图
create view v1 as select * from cc_user u where u.name = 'cc';
2、查询
select * from v1 where id = 1;
3、修改
create or replace view v1 as select * from cc_user u where u.name = 'test';
alter view v1 as select * from cc_user u where u.name = 'cc';
4、查看视图
desc v1
show create view v1
5、删除视图
drop view v2
6、修改数据
注意:增删改会直接作用于原边。
//插入:insert into v1(name) values ('c2')
//修改:update v1 set name = 'c3' where id =3
//删除:delete from v1 where id = 5
7、具备一下特点的视图不允许更新
①包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
②常量视图
③Select中包含子查询
④join
⑤from一个不能更新的视图
⑥where子句的子查询引用了from子句中的表
十、存储过程
1、变量
【1】系统变量
//查看所有全局变量
SHOW GLOBAL VARIABLES;
//查看满足条件的部分系统变量
SHOW GLOBAL VARIABLES LIKE '%char%';
//查看指定的系统变量的值
SELECT @@global.autocommit;
//为某个系统变量赋值
SET @@global.autocommit=0;
SET GLOBAL autocommit=1;
【2】会话变量
//查看所有会话变量
SHOW SESSION VARIABLES;
//查看满足条件的部分会话变量
SHOW SESSION VARIABLES LIKE '%char%';
//查看指定的会话变量的值
SELECT @@autocommit;
SELECT @@session.tx_isolation;
//为某个会话变量赋值
SET @@session.tx_isolation='read-uncommitted';
SET SESSION tx_isolation='read-committed';