06 The IN Operator
-
在前面
表示WHERE 的逻辑关系时,应该注意布尔值 bool,和int,str 这些存在差异 比较逻辑时应该是同类
比如
order_id = 6 AND 3 OR 7
就不是一个好例子,“3”,“7”属于int型,而前者是布尔型 -
使用IN 来简化条件
SELECT *
FROM order_items
WHERE NOT order_id IN (1,2,3,4,5)
# 序号不是...的项目
07 The BETWEEN Operator
SELECT *
FROM customers
WHERE points BETWEEN 1000 and 3000
##选择积分在1000到3000的对象
08 The LIKE Operator
- 选择符合特定条件字符串类型的对象
SELECT *Betchley
FROM customers
WHERE last_name LIKE 'b%'
## %表示后面1个、0个或10个以内的字符
## 即姓为B开头的全部对象信息
## “b”的大小写无影响
%b%
表示包含b的全部内容(前后都没所谓)
y_
表示两个长度的str,且第一个是y
%表示任意数量,_ 表示一个
09 The REGEXP Operator
- 正则表达式
- 具备更强的搜索能力
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
WHERE last_name REGEXP 'field$'
以...结尾
WHERE last_name REGEXP '^field'
以...开头
WHERE last_name REGEXP 'field|mac'
包含...或...
WHERE last_name REGEXP '[gim]e'
包含ge, ie, me
WHERE last_name REGEXP '[a-h]e'
包含ae,be,...,he
10 The IS NULL Operator
- 显示数值为NULL 的对象
SELECT *
FROM customers
WHERE phone IS NULL
## 显示出电话号码没有信息的
11 The ORDER BY Clause
- 列表信息里可以对orders 进行修改
eg. 创建删除移动更名等操作
在column 的前面有不同的标记such as, primary key, not null, so on..
SELECT *
FROM orders
ORDER BY customer_id DESC
## 根据用户id 降序排列
SELECT *
FROM customers
ORDER BY state DESC, first_name DESC
## 先根据州名降序,再按照名降序
SELECT *, quantity * unit_price AS total_price
FROM order_items
WHERE order_id = 2
ORDER BY total_price DESC
##根据总价降序排列订单id为2 的
12 The LIMIT Clause
- 限制获得的对象数目
SELECT *
FROM customers
LIMIT 6, 3
## 跳过前6个记录,再选择3个
SELECT *
FROM customers
ORDER BY points DESC
LIMIT 3
## 选择积分倒序(前三)的记录
13 Inner Joins
- 通过检索A表的关键记录,显示出B(有元素关联信息)表的记录(或某些记录)
SELECT *
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id
## 列出orders,与customers中的全部记录
-
当某一类型同时出现在多个table中,会存在ambiguous 现象,这时需要补完其所在具体table,如上代码中若想选择customer_id 需写
orders.customer_id
-
alias 操作
SELECT order_id, o.customer_id, first_name, last_name
FROM orders o ## order's alias is o
INNER JOIN customers c ##same with upper
ON o.customer_id = c.customer_id
ORDER BY order_id
14 Joining Across Databases
- 运用多个database的列表
- 需要在选择的table前选取属于包含该table的database
USE sql_inventory;
SELECT *
FROM sql_store.order_items oi
JOIN products p
ON oi.product_id = p.product_id
## order_items 不在sql_inventory中,需特别申明其位置
15 Self Join
- 自连接,将自身的某一类数据与相关的数据进行连接匹配
USE sql_hr;
SELECT
e.employee_id,
e.first_name,
m.first_name
FROM employees e
JOIN employees m
ON e.reports_to = m.employee_id
## 此时m.employee_id 全部等同于e.reports_to 的数据了。
##所以开始选取的m.first_name,也就对应到e.reports_to 数值对应的记录了
网友评论