MySql(一)

一、语句

1、USE 语句

data 库加粗显示
USE data

2、SELECT语句

SELECT + 字段名 AS + 字段别名 FROM + 表名 WHERE + 条件  ORDER BY + 字段名

DISTINCT :去重        
ORDER BY :排序
字段名可以使用 (  +   -  *   /  )得到新的字段
字段名 + AS + 字段别名

eg:

SELECT DISTINCT
    last_name,
    first_name AS 'first name',
    points,
    points + 10 * 100  AS discount_factor
FROM customers
ORDER BY last_name

3、WHERE语句

SELECT * FROM Customers WHERE points > 3000

SELECT * FROM Customers WHERE state = 'VA'

SELECT * FROM Customers WHERE state <> 'VA'

SELECT * FROM Customers WHERE DATA > '1999-12-01'

SELECT * FROM Customers WHERE DATA > '1999-12-01' AND points > 1000

SELECT * FROM Customers WHERE NOT DATA > '1999-12-01' AND points > 1000

我们可以用 > >= < <= = != <>
<>表示不等于
条件是字符串的要加''
AND 后加另一个条件 并且两个条件都成立
OR  后加另一个条件 并且两个条件成立一个就可以
AND 优先执行于 OR
NOT 用来否定一个条件

4、IN运算符

SELECT * FROM Customers WHERE state = 'VA' OR state = 'GA' OR state = 'FL'
我们有更好的方式来实现上面的语句
SELECT * FROM Customers WHERE state IN ('VA','GA','FL')

SELECT * FROM Customers WHERE state NOT IN ('VA','GA','FL')

5、BETWEEN运算符

SELECT * FROM customers WHERE points >= 1000 AND points <= 4000
我们有更好的方式来实现上面的语句
SELECT * FROM customers WHERE points BETWEEN 1000 AND 4000

6、LIKE运算符

搜索last_name以b打头的
SELECT * FROM customers WHERE last_name LIKE 'b%'
搜索last_name以b结尾的
SELECT * FROM customers WHERE last_name LIKE '%b'
搜索last_name内带有b的
SELECT * FROM customers WHERE last_name LIKE '%b%'
搜索last_name内两个字符的且第二个字符为b
SELECT * FROM customers WHERE last_name LIKE '_b'
搜索last_name内个六字符的且第一个字符为y第最后一个字符为b
SELECT * FROM customers WHERE last_name LIKE 'y____b'

7、REGEXP运算符

搜索last_name内带有b的
SELECT * FROM customers WHERE last_name LIKE '%b%'
我们有更好的方法来实现上面的语句
SELECT * FROM customers WHERE last_name REGEXP 'b'
以b开头我们可以
SELECT * FROM customers WHERE last_name REGEXP '^b'
以b结尾我们可以
SELECT * FROM customers WHERE last_name REGEXP 'b$'
查询last_name 中有bas或asd或qwe
SELECT * FROM customers WHERE last_name REGEXP 'bas|asd|qwe'
查询last_name 中有bas开头或asd结尾或qwe
SELECT * FROM customers WHERE last_name REGEXP '^bas|asd$|qwe'
查询last_name 中e前面有qwr的
SELECT * FROM customers WHERE last_name REGEXP '[qwr]e'
查询last_name 中e后面有qwr的
SELECT * FROM customers WHERE last_name REGEXP 'e[qwr]'
查询last_name 中e前面有abcdef的
SELECT * FROM customers WHERE last_name REGEXP '[a-f]e'
查询last_name 中e后面有abcdef的
SELECT * FROM customers WHERE last_name REGEXP 'e[a-f]'

8、IS NULL 运算符

搜索所有缺失值的字段
SELECT * FROM customers WHERE phone IS NULL
搜索所有没缺失值的字段
SELECT * FROM customers WHERE phone IS NOT NULL

9、ORDER BY 子句

根据列排序(降序)
SELECT * FROM name ORDER BY data DESC

根据 state降序 first_name升序
SELECT * FROM name ORDER BY state DESC , first_name

10、LIMIT 子句(永远在最后)

查询前三条
SELECT * FROM customers LIMIT 3
查询第七八九条(跳过前六条,查三条)
SELECT * FROM customers LIMIT 6,3

二、操作

1、内连接

连接orders表和customers
SELECT * 
FROM orders 
JOIN customers 
    ON orders.customers_id = customers.customers_id

2、跨数据库连接

和其他数据库的表进行连接
SELECT * 
FROM order_iteam oi  
JOIN sql_inventory.products p 
    ON oi.product_id = p.product_id

3、自连接

找到需要的库
USE sql_hr;
自连接
SELECT 
    e.employee_id,
    e.first_name,
    m.first_name AS manager
FROM employees e
JOIN employees m
    ON e.reports_to = m.employee_id

4、多表连接

找到自己需要的库
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

5、复合连接条件

复合连接条件
SELECT *
FROM order_items oi
JOIN order_iteam_notes oin
    ON oi.order_id= oin.order_id
    AND oi.product_id = oin.product_id 

6、隐式连接语法(不建议使用)

连接orders表和customers
SELECT * 
FROM orders o , customers c
WHERE o.customers_id = c.customers_id

7、外连接

外连接分为(左连接和右连接)
左连接(不管条件是什么左表都会被查出)
SELECT 
    c.customer_id,
    c.first_name,
    o.order_id
FROM customer c   (左表)
LEFT JOIN order o
    ON c.customer_id = o.customer_id
ORDER BY c.customer_id

右连接(不管条件是什么右表都会被查出)
SELECT 
    c.customer_id,
    c.first_name,
    o.order_id
FROM customer c
RIGHT JOIN order o    (右表)
    ON c.customer_id = o.customer_id
ORDER BY c.customer_id

8、多表外连接

左连接(不管条件是什么左表都会被查出)
SELECT 
    c.customer_id,
    c.first_name,
    o.order_id,
    sh.name AS shipper
FROM customer c   
LEFT JOIN order o
    ON c.customer_id = o.customer_id
LEFT JOIN shipper sh
    ON o.shipper_id= sh.shipper_id
ORDER BY c.customer_id
( c 对于 o 来说 c是左表   o 对于 sh 来说 o是左表 )
(多表连接不推荐右连接)

9、自外连接

自外连接
SELECT 
    e.employee_id,
    e.first_name,
    m.first_name AS manager
FROM employees e
LEFT JOIN employees m
    ON e.reports_to = m.employee_id

10、USING子句

左连接
SELECT 
    c.customer_id,
    c.first_name,
    o.order_id
FROM customer c   (左表)
LEFT JOIN order o
    ON c.customer_id = o.customer_id
ORDER BY c.customer_id

我们可以用USING来简写上面的语句
SELECT 
    c.customer_id,
    c.first_name,
    o.order_id
FROM customer c   (左表)
LEFT JOIN order o
    --ON c.customer_id = o.customer_id   (只有连接字段名相同时才可以使用)
    USING(customer_id)
ORDER BY c.customer_id

多条件时
SELECT *
FROM order_items oi
JOIN order_item_notes oin
    ON oi.order_id = oin.order_id
    AND oi.product_id = oin.product_id
我们可以简写成
SELECT *
FROM order_items oi
JOIN order_item_notes oin
   -- ON oi.order_id = oin.order_id
   -- AND oi.product_id = oin.product_id
    USING (order_id,product_id)

11、自然连接

自然连接系统自动寻找相同的字段进行连接(不推荐使用)
SELECT *
FROM orders o
NATURAL JOIN customers c

12、交叉连接

一个表的每一条记录和另一个每条记录相结合
SELECT *
FROM customers c
CROSS JOIN products p

第二种写法
SELECT *
FROM customers c ,products p

13、联合

UNION关键字 
(可以在不同的表进行查询联合,但是查询的列数必须相同)
(第一段查询的名字决定联合后列的名字)

SELECT 
    order_id,
    order_data,
    'Archived' AS status
FROM  orders
WHERE order_data >= '1999-01-01'
UNION
SELECT 
    order_id,
    order_data,
    'Active' AS status
FROM  orders
WHERE order_data < '1999-01-01'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zjc啥也不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值