最近学了下sql , 这里简单的做下笔记, 便于备忘.
为什么学习sql ?
最近想做一做后端 , sql就成了必学的东西, 并且学习sql的性价比非常高 , 基本后端,测试,运维都需要掌握sql,做为前端学习sql,也能扩大自己的视野
sql概述
SQL(sructured query language)
分为: 表 列 行
主键: 每行数据用于确定唯一身份 的 列
sql 又子句构成 . 有的是必选有的可选 如from order BY
as可以给列名重新命别名 select name as a from...
检索数据
简单的查询 select 列... form 表名
单列 : select id form table
多列 : select id,name form table
所有列 : select * form table
获取不重复值的列 DISTINCT
比如想去除学校相同的行
select DISTINCT school form table
限制结果 limit
limit 3,4 值返回重第3行开始的3条数据
limit 5 只返回上面的5条
排序
order by (确保写在结尾)
排序方向 order by id desc,name desc
数据过滤
BETWEEW 2 and 4 是对同一列过滤
and or 对不同的列进一步过滤
in ('a','b') 指定条件范围 , 比or跟合适
not用于否定后面的子句 , 写在子句的前面
通配符 : 匹配部分字符
用like开头 , 后面使用通配符
where name like '汪%'
- % 匹配任意数量的任意字符 . %abc% 包含abc
- _ 与%差不多,但匹配单个字符
- 指定字符集 [ac]% 必须以ac开头
计算字段
用于更改数据的格式
as将计算好的列重新命名
TRIM函数 去除空格
拼接 concat(mysql) , +
函数
不同的数据库 , 函数差异大 , 所以要查看相关数据库的文档
-
日期处理函数 , 不同的数据库有不同的方言
mysql
year mouth 返回年月
-
常用的文本处理函数
函 数 说 明 LEFT( 列 , 截取长度 )(或使用子字符串函数) 返回字符串左边的字符
LENGTH()(也使用DATALENGTH()或LEN()) 返回字符串的长度 LOWER() 将字符串转换为小写 LTRIM() 去掉字符串左边的空格 RIGHT()(或使用子字符串函数) 返回字符串右边的字符 RTRIM() 去掉字符串右边的空格 SUBSTRING(列 , start , end) 提取字符串的组成部分
SOUNDEX() 返回字符串的SOUNDEX值 UPPER() 将字符串转换为大写
-
数值处理函数 , 不同的数据库有不同的方言
ABS()
返回一个数的绝对值
COS()
返回一个角度的余弦
EXP()
返回一个数的指数值
PI()
返回圆周率 π 的值
SIN()
返回一个角度的正弦
SQRT()
返回一个数的平方根
TAN()
返回一个角度的正切
数据聚集
将多个行 , 聚集到同一行来 , 配合分组使用
-
聚集函数
AVG()
返回某列的平均值
COUNT()
返回某列的行数
MAX()
返回某列的最大值
MIN()
返回某列的最小值
SUM()
返回某列值之和
分组
group by 对没个组 进行数据的聚集 , 可以对多个字段进行聚集
having : 对分组进行过滤 与where类似 , where是在分组钱进行过滤 , having在分组后
-
SELECT 子句顺序
子查询
SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01');
常用与in操作符 , 也能在计算字段使用, 也可用于两子表做链接
联结
通过键联结多个表 , 用的最多的联结也就是等值联结
内间接 也叫等值联结 inner join table on a.id==b.id
自然链接 id这种会出现在多个表 . 但链接时 , 会选出两列id , 需要加上限度 select Orders.id from
自联结 连接自己 , 需要用到别名 一个表多次使用
外联结和全联结 都只是加上空的行
组合查询
UNION : 可以将多个select 查询出的结果进行合并 , 也就是得出满足任意一个where子句的行
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';
以上就核心的查询部分 , 更多内容可以参考
sql必知必会 (电子书)
sql学了之后要及时练习 , 推荐牛客的题库 www.nowcoder.com/exam/oj?pag…