1.基础查询
DESC 库名//查看库
SHOW DATABASES ;//查看当前所在数据库
SHOW TABLES;//查看当前库的所有表
USE database;//datebase为需要查询的库名
SELECT attribute,attribute2 FROM form;//从form中查询attribute,attribute2
SELECT * FROM beauty;//查询表中所有属性
SELECT DISTINCT attribute FROM form;//查询相关元素并去重,当查询多个属性时,需多个属性同时相同才满足去重条件
SELECT id FROM beauty WHERE id=1;//where后为限制条件
/* where子句中的运算符
=:等于
<>:不等于(在sql的一些版本中也可以写成!=)
>:大于
<:小于
>=:大于等于
<=:小于等于
and(&&):且
or(||):或
not(!):否
between:在某个范围内,如:where income between 1000 and 2000,等价于 between income>=1000 and income <=2000
like:模糊查询
%表示多个字符,_表示一个字符
如: like 'm%'; 表示查询以m开头的内容
like '%m_'; 表示查询以m在倒数第二位的所有内容
in:查询内容在某些可能值内 如: where income in (1000,2000,3000)
null:空
*/
ORDER BY;//用于对结果集按照一个列或者多个列进行排序,当其后跟有多列时,先按第一列排序,再按第二列....,默认情况为按升序排列,但可以进行修改,如 ORDER BY A ,B DESC; 按a的升序,b的降序排列
2.常见函数
1.字符函数
concat:拼接
举例:
concat("aaa","bbb","ccc");
返回:"aaabbbccc"
substr:截取子串
举例:
substr("一二三四五六",1,5);
返回:"一二三四五"
upper:转换成大写
举例:
upper("AbcB");
返回:"ABCB"
lower:转换成小写
同上
trim:去前后指定的空格和字符
举例:
trim(" aaaa ");
返回:"aaaa"
ltrim:去左边空格
同上
rtrim:去右边空格
同上
length:获取字节个数
举例:
length("1 2");
返回:3
2.数学函数
round:四舍五入
举例:
ROUND(4.3);
返回:4
rand: 随机产生介于0~1之间的数
floor:向下取整
举例:
FLOOR(4.2);
返回:4
ceil:向上取整
同上
mod:取余
举例:
MOD(9.2,2.1);
返回:0.8
truncate:截断
举例:
TRUNCATE(7.12345678,3);
返回:7.123
3.流程控制函数
IF(expr1,expr2,expr3):expr1为true,返回expr2,否则返回expr3
IF THEN
ELSEIF THEN
ELSE
END IF;(与c语言if else语句基本相同)
SELECT CASE 1
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'other'
END;(返回'one',与c语言switch语句基本相同)
4.分组函数
sum: 求和
举例:
SELECT SUM(column_name) FROM table_name;
说明:求table_name表中,所有column_name的和
max: 最大值
同上
min: 最小值
同上
avg: 平均值
同上
count: 计数
举例:
SELECT COUNT(income) AS nums FROM access_log
WHERE site_id=3;
说明:求access_log表中,site_id=3的人的工资之和,并存在nums中
注意:
1、以上五个分组函数都忽略null值,除了count(*)
2、sum和avg一般用于处理数值型
max、min、count可以处理任何数据类型
3、都可以搭配distinct使用,用于统计去重后的结果
4、count的参数可以支持:
字段、*、常量值,一般放1
3.分组查询
select 查询的字段,分组函数
from 表
group by 分组的字段
注意:
1、可以按单个字段分组
2、和分组函数一同查询的字段最好是分组后的字段
3、分组筛选
针对的表 位置 关键字
分组前筛选: 原始表 group by的前面 where
分组后筛选: 分组后的结果集 group by的后面 having
4、可以按多个字段分组,字段之间用逗号隔开
5、可以支持排序
6、having后可以支持别名
4.连接查询(多表查询)
1.分类:
按年代:
sq192标准:仅仅支持内连接
sq199标准: 支持内连接+外连接(左外+右外)+交叉连接
按功能分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接
右外连接
全外连接
交叉连接
2.sq192标准:
SELECT 查询元素
FROM 元素来自哪些表 AS 别名
WHERE 查询条件,连接条件(不加连接条件会出现表与表之间的笛卡尔乘积)
注意:如果为表取了别名。对元素进行限定只能通过别名
根据where的条件区分等值连接,和非等值连接
自己连接自己为自连接(为了方便区分,取别名)
3.sq199标准:
SELECT 查询元素
FROM 表1 别名 (连接类型)JOIN 表2 ON 连接条件
WHERE 筛选条件
连接类型关键词 :
内连接:inner
外连接:
左外:left outer(可省略)(join 左边的是主表)
右外:right outer(join 右边的是主表)
全外:full outer
交叉连接:cross(迪达尔乘积)
5.子查询:出现在其他语句中的select语句,称为子查询或内查询
分类:
按子查询出现的位置:
select后面:标量子查询
from后面:表子查询
where或having后面:标量子查询,列子查询,行子查询⭐
exists后面:表子查询
按结果集进行查询
标量子查询(结果集只有一行一列)
列子查询(结果集一列多行)
行子查询(结果集多行队列)
表子查询(随意)
where和having后面:
1.标量子查询(单行子查询)
通常在单行操作符后
SELECT 元素1,元素2
FROM 表
WHERE 元素2>(SELECT 元素2
FROM 表2
WHERE 条件
);
2.列子查询(多行子查询)
通常在多行操作符后:IN,NOT IN, ANY,SOME,ALL
SELECT 元素1,元素2
FROM 表
WHERE 元素2 IN(SELECT 元素2
FROM 表2
WHERE 条件
);
3.行子查询(多行多列)
SELECT 元素1,元素2
FROM 表
WHERE (元素1,元素2) IN(SELECT 元素1,元素2
FROM 表2
WHERE 条件
);
特点:
1.子查询放在小括号内
2.子查询一般放在条件的右侧
3.标量子查询一般搭配着单行操作符使用
SELECT后的子查询:(子查询结果必须为1行1列)
SELECT a.元素1 (SELECT b.元素2,b.元素1
FROM 表2 b
WHERE b.元素1=a.元素1
)
FROM 表1 a;
6.分页查询
SELECT 元素
FROM 表
【join type】 join 表2
on 连接条件
WHERE 筛选条件
group by 分组元素
having 筛选条件
order by 排序字段
limit 起始位子,数量;
起始位子从0开始
7.联合查询:将多条查询语句的结果合并成一个结果
SELECT 元素 FROM 表 WHERE 条件
UNION ALL(加all不去重)
SELECT 元素 FROM 表 WHERE 条件
注意:元素数必须相同
会去重
--某科学的超电磁炮