mySQL 学习 DAY2笔记

作者: Peng_001 | 来源:发表于2020-02-20 23:20 被阅读0次

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 数值对应的记录了

相关文章

网友评论

    本文标题:mySQL 学习 DAY2笔记

    本文链接:https://www.haomeiwen.com/subject/kufqqhtx.html