sql基础语法查询手册

1、USE

USE sql_store;

2、SELECT

SELECT *  返回所有列
SELECT 1,2 
SELECT first_name,last_name  返回指定列
SELECT 
    first_name,
    last_name,
    points,
    points * 0.1 AS 'discount factor' 
    返回经过运算后的指定列,且自定义列名
SELECT DISTINCT state 去重
FROM customers

3、WHERE

SELECT *
FROM customers
WHERE points > 3000  不同条件的where语句
WHERE customer_id = 1  运算符中不等于用!=或者<>来表示
WHERE birth_date > '1990-01-01' 有关日期的筛选
WHERE birth_day > '1990-01-01' AND points > 100 多条件查询
WHERE birth_date > '1990-01-01' 
	OR points > 100 AND state = 'VA' AND的优先级大于OR
WHERE NOT(birth_date > '1990-01-01'
	OR points > 1000)   NOT 用于否定条件
IN
WHERE state = 'VA' OR state = 'GA' OR state = 'FL'
WHERE state IN ('VA','GA','FL') 
BETWEEN
WHERE points >= 1000 AND points <= 3000
WHERE points BETWEEN 1000 AND 3000
LIKE
WHERE last_name LIKE 'b%'   以b开头,不管大小写
WHERE last_name LIKE '%B%'  含有b
WHERE last_name LIKE '%b'   以b结尾
WHERE last_name LIKE '_b'   有a个_,就代表取第a+1个字母是b的列
REGEXP 正则表达式
WHERE last_name REGEXP 'field' 包含field
WHERE last_name REGEXP '^field'  以field开头
WHERE last_name REGEXP 'field$'  以field结尾
WHERE last_name REGEXP '^field|mac'   以field开头或者含mac
WHERE last_name REGEXP 'field$|mac|rose'  以field结尾或者包含mac或者包含rose
WHERE last_name REGEXP '[gim]e' 包含ge或ie或me
WHERE last_name REGEXP '[a-h]e' 包含从(a-h)中的任意一个加上m
IS NULL
WHERE phone is null 查询phone字段为null的记录

4、ORDER BY

ORDER BY first_name  按照fiest_name的首字母进行升序排列
ORDER BY first_name DESC  按照firsts_name的首字母进行降序排列
ORDER BY state,first_name 多列排序,首先按照state的首字母顺序进行排序,
然后在state相同的情况下,再按照first_name的首字母顺序进行排列。
SELECT *, quantity * unit_price AS total_price
FROM order_items
WHERE order_id = 2
ORDER BY total_price DESC 实现的功能是将数量和单价的乘积定义为总价,
然后查询id为2且总价按照降序排列的记录

5、limit

SELECT *
FROM customers
LIMIT 3  得到前三条记录
LIMIT 6,3 跳过前六条记录,查询第7,8,9三条记录
SELECT *
FROM customers
ORDER BY points DESC
LIMIT 3  查询points排名前三的记录

6、Inner Join

DB内table合并
SELECT order_id,o.customer_id,first_name,last_name
FROM orders o
JOIN customers c
	ON o.customer_id = c.customer_id

按照customer_id将orders表和customers表连接起来,为了简便,将orders表定义为o,
将customers表定义为c。对于customer_id,因为它在两张表中都出现了,那么必须在select
的时候就确定好这个列是来自于哪张表格的,否则就会出现ambiguous的错误。
DB间table合并
USE sql_inventory;
SELECT * 
FROM sql_store.order_items o
JOIN products p
    ON o.product_id = p.product_id
在表间table合并时,一定要注意table来自哪个DB,以及USE的是哪一个DB,没有明确USE的情况下,需要加上前缀以声明所来自的DB
table内字段合并

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9RIlWUR-1585151099105)(/images/21.png)]

以上面这个表为例,每个employee_id对应着不同的reports_to,即汇报对象,
那么这个汇报对象应该就是员工的leader,第二个员工的reports_to字段为空,
这说明这个员工或许是CEO。
USE sql_hr;
SELECT e.first_name,m.first_name AS leader
FROM employees e
JOIN employees m
	ON e.reports_to = m.employee_id
由上述操作,我们可以得到员工id,员工姓名,以及其leader的姓名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4x9d3ZDK-1585151099108)(/images/22.png)]

三个以上table合并
USE sql_store;
SELECT 
    o.order_id,
    o.order_date,
    c.first_name,
    c.last_name,
    os.name AS status
FROM orders o
JOIN customers c
    ON o.customer_id = c.customer_id
JOIN order_statuses os
    ON o.status = os.order_status_id
同时使用多个JOIN
发布了58 篇原创文章 · 获赞 30 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览