SQL 必知必会
第1章 了解SQL
定义
结构化查询语言(Structured Query Language)
主键
定义
一行或一组列,其值能够唯一标识表中每一行
要求
任意两行不能有相同的主键值
每一行都必须有一个主键值
主键列中的值不能更改或更新
主键值不能重用(一旦删除,不能够再赋予给以后的新行)
第2章 检索数据:SELECT
基本语法
SELECT Col1,Col2, FROM table
选择全部列
星号 *
选择不同行
DISTINCT
作用于所有行,不仅仅是跟在其后的一行:即只要两行不是所有列完全相同,则会被检索出来。
限制查询结果行数
SQL SERVER: TOP 5
SELECT TOP 5 student_name FROM Students
MYSQL :LIMIT 5 OFFESET 3
SELECT prod_name FROM Products LIMIT 5 OFFSET 5
可以简写为LIMIT 3,5
索引序号从0开始
第3章 排序检索数据:ORDER BY
语句位置
SELECT 语句的最后一条
指定排序列的方式
按列位置(序号)排序
'位置'指的是SELECT语句后的列排序顺序,而不是原表中的顺序
序号从1开始
缺点
对SELECT 清单修改时,如果没有同时修改ORDER BY的序号,容易出错。
指定准确列名
SELECT .....
ORDER BY col1,col2
指定顺序
DESC/ASC
位置
对应列名后
默认为ASC,可省略
第4章 过滤数据:WHERE
基本操作符
不等于:<>/!=
MSSQL和MYSQL两者都可使用
可以用于字符串匹配检查
不大于,不小于:!>, !<
BETWEEN
支持字符串,日期/时间,数值的比较
NULL值的比较检测
IS NULL/IS NOT NULL
专门用于NULL值得匹配
<=>
当且仅当两个值都为NULL时才返回NULL
不能使用=/<>来对NULL值进行比较或检验
MYSQL的NULL值处理(RUNOOB)
第5章 高级数据过滤
AND
OR
注意:AND优先级高于OR。多使用括号确立优先级,即使知晓优先级。
IN
语法
col in (a,b,c) 等价于col1 =a or col1 = b or col =c
优点
比对应的OR语句更快
更直观
配合其他select查询进行嵌套
NOT
作用
否认其后的条件
位置
位于其他判断关键词前:NOT IN
第6章 通配符:LIKE
%
作用
任意字符出现任意次数
任意字数:可以匹配0个字符
一个使用场景:字段后填补的空格的解决
在匹配字符串后再加一个%,来匹配空格
语法
SELECT *
FROM Customers
WHERE cust_name LIKE 'F%'
不匹配NULL
'%'不会匹配为NULL的行
ACCESS 使用的是*
下划线_
作用
仅匹配单个字符,且不可匹配0个字符
字符集匹配
[ ]
作用
匹配字符集
使用
SQL SERVER
SELECT *
FROM Customers
WHERE cust_name LIKE '[FV]%';
语法
SELECT *
FROM Customers
WHERE cust_name RLIKE '^[FV]';
正则表达式RLIKE(FOR MYSQL)
MYSQL不支持使用[]匹配字符集
MySQL 中使用 REGEXP 或 NOT REGEXP (或 RLIKE 和 NOT RLIKE) 和正则表达式来实现字符串匹配。
语法
SELECT *
FROM course
WHERE Tno REGEXP '^[张王].*'
RUNOOB链接
^
作用
对[ ]进行否定:即不在方扩内的字母才能够匹配
使用
[^JMK]
注意点
使用技巧
① 不要过度使用通配符
② 尽量不要在搜索模式的开始使用通配符
③ 特别注意通配符位置的正确使用
④默认不区分大小写
第7章 创建计算字段
位置
紧贴在SELECT后
别名(ALIAS)
作用
一个字段或值的替换名
为拼接等字符操作创建的字段提供名称
使用
AS
MYSQL,MSSQL都可以省略 AS
拼接字段(concatenate)
SQL SERVER
+(使用与Python相似)
Oracle,SQLite等
||
MySQL,MariaDB
Concat()语句
SELECT CONCAT(id, name, work_date)
FROM employee_tbl;
算术计算
+-*/
()改变计算顺序
第8章 使用函数处理数据
DBMS差异:函数在各DBMS的通用度较低,只有少数函数通用。
可移植
代码可在不同系统上运行