MySQL基础知识

1.基本介绍

MySQL被划分为关系数据库管理系统(RDBMS)

  • 数据库:用来存储信息的仓储。

    • 数据库里面的数据集都被组织成表
    • 每个表由多个行和列组成
    • 表中的每一行称为一条记录
    • 记录可以包含多项信息;表中的每一列都是一项信息
  • 管理系统:是一个软件,我们可以通过它来增删查改记录
  • 关系:能够通过查找两个表里的共同元素,将分别存在于两个表里的信息联系起来

2.查询操作

# 查询一列
SELECT prod_id FROM products

# 查询多列
SELECT prod_id, prod_name FROM products

# 查询所有
SELECT * FROM  products

# distinct查询一列,过滤相同的,即只查询不同的值
SELECT prod_id DISTINCT FROM products

# 查询从指定位置开始的指定列数的内容(limit指定数量,offset指定行,MySQL可以直接用limit)
SELECT prod_name FROM products limit 5  offset 5
SELECT prod_name FROM products limit 5, 5

3.排序操作

# 指定列排序
SELECT prod_name FROM products ORDER BY prod_name 

# 多个列排序
SELECT prod_name, prod_id FROM products ORDER BY prod_name, prod_id

# 按列位置排序
SELECT prod_name, prod_id FROM products ORDER BY 1,2

# 降序排序
SELECT prod_name FROM products ORDER BY prod_id DESC

4.过滤数据

# 查询两列,只返回prod_price=3.49的行
SELECT prod_name, prod_price From Products WHERE prod_price=3.49

# 根据运算的大小关系选出指定的行
SELECT prod_name, prod_price FROM Products WHERE prod_price < 10

# 列出所有不是供应商DLL01制造的产品(<>和 != 在MySQL中是通用的)
SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01';

# BETWEEN用来查询介于两者之前的值,包括两端
SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10;

# 查询空值NULL而不是0
SELECT cust_name FROM CUSTOMERS WHERE cust_email IS NULL;

5.高级过滤

# AND操作符连接两个条件
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;

# OR检索匹配任一条件的行。事实上,许多DBMS在OR WHERE子句的第一个条件得到满足的情况下,
就不再计算第二个条件了(在第一个条件满足时,不管第二个条件是否满足,相应的行都将被检索出来)
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’;

# 先执行后面AND连接的语句,vend_id = 'DLL01' OR (vend_id = ‘BRS01’ AND prod_price >= 10)
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’
AND prod_price >= 10;

# 改变执行顺序可以加括号
SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = ‘BRS01’)
AND prod_price >= 10

# IN表示在每个列中,和OR的功能一样
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' )
ORDER BY prod_name

# NOT表示除了之外
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;

6.用通配符进行过滤

通配符搜索只能用于文本字段(串),非文本数据类型字段不能使用通配符搜索。

# %表示任何字符出现任意次数
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';

# _ 匹配单个字符
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';

# 方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符
# MySQL不支持该语法
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE '[JM]%'
ORDER BY cust_contact;

通配符的使用技巧:

  1. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  2. 在确实需要使用通配符时,也尽量不要把它们用在搜索模式的开始处。把通配符置于开始处,搜索起来是最慢的。
  3. 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

7.计算字段

# expanded_price列是一个计算字段,此计算为quantity*item_price
SELECT prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_num = 20008;

# 返回 6
SELECT 3 * 2

#返回当前时间
SELECT Now()

8.函数

常用的文本处理函数:

函数说明
LEFT()(或使用子字符串函数)返回字符串左边的字符
LENGTH()(也使用DATALENGTH()或LEN())返回字符串的长度
LOWER()(Access使用LCASE())将字符串转换为小写
LTRIM()去掉字符串左边的空格
RIGHT()(或使用子字符串函数)返回字符串右边的字符
RTRIM()去掉字符串右边的空格
SOUNDEX()返回字符串的SOUNDEX值
UPPER()(Access使用UCASE())将字符串转换为大写
# UPPER()将文本转换为大写
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name

# WHERE子句使用SOUNDEX()函数把cust_contact列值和搜索字符串转换为它们的SOUNDEX值。(发音相同)
SELECT cust_name, cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green')

# YEAE() 根据指定字段条件找出指定的值
SELECT order_num
FROM Orders
WHERE YEAR(order_date) = 2012

常用的数值处理函数:

函数说明
ABS()返回一个数的绝对值
COS()返回一个角度的余弦
EXP()返回一个数的指数值
PI()返回圆周率
SIN()返回一个角度的正弦
SQRT()返回一个数的平方根
TAN()返回一个角度的正切

9.聚集函数

聚集函数(aggregate function) 对某些行运行的函数,计算并返回一个值。

函数说明
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和
# 求价格平均值
SELECT AVG(prod_price) AS avg_price
FROM Products;

# 指定条件下的平均值 
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';

# COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值
SELECT COUNT(*) AS num_cust
FROM Customers

# 对指定列中有值的行进行计数
SELECT COUNT(cust_email) AS num_cust
FROM Customers;

# MAX()返回指定列中的最大值
SELECT MAX(prod_price) AS max_price
FROM Products;

# MIN()返回指定列的最小值
SELECT MIN(prod_price) AS min_price
FROM Products;

# SUM()用来返回指定列值的和(总计)
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num = 20005;

# 组合聚类函数
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_avg
FROM Products

10.分组数据

# GROUP BY子句指示DBMS按vend_id排序并分组数据
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id

WHERE是过滤行,而HAVING过滤分组

SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
子句说明
SELECT要返回的列或表达式是
FROM从中检索数据的表仅在从表选择数据时使用
WHERE行级过滤否
GROUP BY分组说明仅在按组计算聚集时使用
HAVING组级过滤否
ORDER BY输出排序顺序否
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值