Mysql 基础用法
Mysql 基础用法
本篇文章主要介绍了一些Mysql的一些基础用法,适合小白学习,再加上自己多加练习,相信你一定能熟练掌握!!!
SELECT 语句
解释
select 语句用于冲表中选取数据。结果被储存在一个结果表(称为结果集)中
用法
select 列名称 from 表名称select * from 表名称
举个栗子
如需获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表),请使用类似这样的 SELECT 语句:
SELECT LastName,FirstName FROM Persons
"Persons" 表:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
结果:
| LastName | FirstName |
|---|---|
| Adams | John |
| Bush | George |
| Carter | Thomas |
DISTINCT 语句
解释
distinct 用于返回唯一不同的值
用法
select distinct 列名称 from 表名称
举个栗子
从 "Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句
SELECT DISTINCT Company FROM Orders
"Orders"表:
| Company | OrderNumber |
|---|---|
| IBM | 3532 |
| W3School | 2356 |
| Apple | 4698 |
| W3School | 6953 |
结果:
| Company |
|---|
| IBM |
| W3School |
| Apple |
WHERE 语句
解释
where 子句后面添加条件,可以筛选出符合条件的数据
语法
select 列表名 from 表名称 where 条件
| 操作符 | 描述 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| BETWEEN | 在某个范围内 |
| LIKE | 搜索某种模式 |
| IN | 指定针对某个列的多个可能值 |
| EXISTS | 在子查询中匹配到符合条件的数据行 |
注:在某些版本中,<>相当于!=
举个栗子
选取住在BeiJing的人,需要使用where子句
SELECT * FROM Persons WHERE City='Beijing'
"Persons" 表
| LastName | FirstName | Address | City |
|---|---|---|---|
| Adams | John | Oxford Street | London |
| Bush | George | Fifth Avenue | New York |
| Carter | Thomas | Changan Street | Beijing |
| Gates | Bill | Xuanwumen 10 | Beijing |
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Gates | Bill | Xuanwumen 10 | Beijing |
TOP 语句
解释
top 子句用于规定要返回的记录的数目,对于拥有数千条记录的大型表来说,top子句式非常有用的,但是并非所有的数据库系统都支持top子句
top子句于limit是等价的
语法
select top 数字 列名 from 表名select top 百分比 列名 from 表名
举个栗子
获取Persons表中的前三条数据
SELECT TOP 3 * FROM Persons
或者
SELECT * FROM Persons LIMIT 3
Persons 表:
| Id | Name | Address | City |
|---|---|---|---|
| 1 | Adams | Oxford Street | London |
| 2 | Bush | Fifth Avenue | New York |
| 3 | Carter | Changan Street | Beijing |
| 4 | Obama | Pennsylvania Avenue | Washington |
结果:
| Id | Name | Address | City |
|---|---|---|---|
| 1 | Adams | Oxford Stre | London |
| 2 | Bush | Fifth Avenue | New York |
| 3 | Carter | Changan Street | Beijing |
AND/OR 语句
解释
AND用于第一个条件和第二个条件都成立的情况
OR用于第一个条件和第二个条件成立一个的情况
语法
select 列名称 from where 条件一 and 条件二select 列名称 from where 条件一 or 条件二
举个栗子
原表
| LastName | FirstName | Address | City |
|---|---|---|---|
| Adams | John | Oxford Street | London |
| Bush | George | Fifth Avenue | New York |
| Carter | Thomas | Changan Street | Beijing |
| Carter | William | Xuanwumen 10 | Beijing |
获取所有名为 "Thomas"并且姓为"Carter"的人
SELECT * FROM Persons WHERE LastName='Carter' AND FirstName='Thomas'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
获取所有名为 "Thomas"或姓为"Carter"的人
SELECT * FROM Persons WHERE LastName='Carter' OR FirstName='Thomas'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Carter | William | Xuanwumen 10 | Beijing |
GROUP BY 语句
解释
通常与聚合函数相结合,根据一个或多个列对结果集进行分组
语法
select 列名,聚合函数(列名)from 表名 where 列名 运算符 值 group by 列名
举个栗子
我们拥有下面这个 "Orders" 表:
| O_Id | OrderDate | OrderPrice | Customer |
|---|---|---|---|
| 1 | 2008/12/29 | 1000 | Bush |
| 2 | 2008/11/23 | 1600 | Carter |
| 3 | 2008/10/05 | 700 | Bush |
| 4 | 2008/09/28 | 300 | Bush |
| 5 | 2008/08/06 | 2000 | Adams |
| 6 | 2008/07/21 | 100 | Carter |
查找每个客户的总金额
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
结果:
| Customer | SUM(OrderPrice) |
|---|---|
| Bush | 2000 |
| Carter | 1700 |
| Adams | 2000 |
如果省略group by 会怎样?
SELECT Customer,SUM(OrderPrice) FROM Orders
结果如下
| Customer | SUM(OrderPrice) |
|---|---|
| Bush | 5700 |
| Carter | 5700 |
| Bush | 5700 |
| Bush | 5700 |
| Adams | 5700 |
| Carter | 5700 |
解释
该语句指定了两列(Customer 和SUM(OrderPrice))。“SUM(OrderPrice)”返回的一个单独的值(“OrderPrice”列的总和),而“Customer”返回6个值(每个值对应 "Orders" 表中的每一行)
HAVING 语句
解释
having主要分组后的数据进一步的过滤,找到符合分组条件的记录
语法
select column_name,aggregate_function(column_name)from table_namewhere column_name operator valuegroup by column_namehaving aggregate_function(column_name) operator value
举个栗子
Orders 表
| O_Id | OrderDate | OrderPrice | Customer |
|---|---|---|---|
| 1 | 2008/12/29 | 1000 | Bush |
| 2 | 2008/11/23 | 1600 | Carter |
| 3 | 2008/10/05 | 700 | Bush |
| 4 | 2008/09/28 | 300 | Bush |
| 5 | 2008/08/06 | 2000 | Adams |
| 6 | 2008/07/21 | 100 | Carter |
现在要找订单总金额少于2000的客户
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
结果
| Customer | SUM(OrderPrice) |
|---|---|
| Carter | 1700 |
现在我们查找客户“Bush”或“Adams”拥有超过1500的订单总金额
SELECT Customer,SUM(OrderPrice) From Orders
where Customer = 'Bush' or Customer = 'Adams'
Group by Customer
having sum(OrderPrice)>=1500
where Customer = 'Bush' or Customer = 'Adams'
结果
| Customer | SUM(OrderPrice) |
|---|---|
| Bush | 2000 |
| Adams | 2000 |
ORDER BY 语句
解释
- 用于根据指定的列对结果集进行排序
- 默认按照升序对记录进行排序
语法
- select 列表名 from 表名 order by 列表名 asc/desc
举个栗子
Orders表
| Company | OrderNumber |
|---|---|
| IBM | 3532 |
| W3School | 2356 |
| Apple | 4698 |
| W3School | 6953 |
以字母顺序显示公司名称
select * from Orders order by Company
结果
| Company | OrderNumber |
|---|---|
| Apple | 4698 |
| IBM | 3532 |
| W3School | 6953 |
| W3School | 2356 |
以字母逆序显示公司名称,相同的公司按照顺序号进行排序
select * from Orders order by Company desc,OrderNumber asc
结果
| Company | OrderNumber |
|---|---|
| W3School | 2356 |
| W3School | 6953 |
| IBM | 3532 |
| Apple | 4698 |
INSERT INTO 语句
解释
向表中插入数据记录
语法
insert into 表名称 values(值1,值2,...)isnert into 表名称(列1,列2,...) values (值1,值2,...)
举个栗子
Persons 表
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
插入新的行
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
结果
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Gates | Bill | Xuanwumen 10 | Beijing |
插入新的行
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
结果
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Champs-Elysees |
UPDATE 语句
解释
更新表中的数据
语法
update 表名称 set 列名称 = 新值 where 列名称 = 某值
举个栗子
Person 表
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Champs-Elysees |
将 LastName 是“Wilson” 的人添加 “FirstName”
updata Person set FirstName = 'Fred' where LastName = 'Wilson'
结果
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Fred | Champs-Elysees |
更新 LastName 是“Wilson” 的人的住址,并添加城市
updata Person set Address = 'zhongshan 23',City = 'NanJing'
结果
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Fred | Zhongshan 23 | Nanjing |
DELETE 语句
解释
用于删除表中的行
语法
delete from 表名称 where 列名称 = 值
举个栗子
Person表
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Fred | Zhongshan 23 | Nanjing |
删除 “Fred Wilson”的信息
delete from Person where LastName = 'Wilson'
结果
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
删除所有行
DELETE FROM table_name
或者:
DELETE * FROM table_name
注意:这样的操作是不会删除表,表的结构、属性和索引都是完整的
LIKE 语句
解释
在where子句中用于指定模式来搜索数据,通常与%连用,被称为模糊查找
语法
select colum_name(s) from table_name where column_name like pattern
举个栗子
Pserson 表
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
找出“Person”表中住城市地址以“N”开头的人
select * from Person where City like 'N%'
结果
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 2 | Bush | George | Fifth Avenue | New York |
找出居住城市中包含“lon”的人
select * from Person where City like '%lon%'
结果
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
找出表中居住城市中不包含“lon”的人
select * from Person where City not like '%lon%'
结果
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
IN 语句
解释
in 运算符允许在where子句中指定多个值,可以理解为or条件的简写
语法
select column_name(s) from table_name where column_name in (value1,value2,...)
举个栗子
Person 表
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
获取表中LastName为“Adams”和“Carter”的人
select * from Person where LastName in ('ADams','Cater')
结果
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 3 | Carter | Thomas | Changan Street | Beijing |
BETWEEN AND 语句
解释
筛选出介于两个值之间的数据范围。这个值可以是数值、文本、日期等,区间范围为前闭后闭,前开后开,前闭后开都有可能,不同的数据库可能不同
语法
select column_name(s) from table_name where column_name between value1 and value2
举个栗子
Person 表
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
| 4 | Gates | Bill | Xuanwumen 10 | Beijing |
查找字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人
select * from Person where LastName between 'Adams' and 'Carter'
结果
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
可以与 not 进行连用
select * from Person where LastName not between 'Adams' and 'Carter'
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 3 | Carter | Thomas | Changan Street | Beijing |
| 4 | Gates | Bill | Xuanwumen 10 | Beijing |
UNION 语句
解释
组合两个或更多select语句的结果集
注意
- union 中每个select 语句必须具有相同的列数
- 这些列也必须有相似的数据类型
语法
select column_name(s) from table_name1 union select column_name(s) from table_name2select column_name(s) from table_name1 union all select column_name(s) from table_name2
举个栗子
Employees_China 表
| E_ID | E_Name |
|---|---|
| 01 | Zhang, Hua |
| 02 | Wang, Wei |
| 03 | Carter, Thomas |
| 04 | Yang, Ming |
Employees_Usa 表
| E_ID | E_Name |
|---|---|
| 01 | Adams, John |
| 02 | Bush, George |
| 03 | Carter, Thomas |
| 04 | Gates, Bill |
找出所有在中和和在美国的不同员工(会去重)
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
结果
| E_Name |
|---|
| Zhang, Hua |
| Wang, Wei |
| Carter, Thomas |
| Yang, Ming |
| Adams, John |
| Bush, George |
| Gates, Bill |
找出所有在中和和在美国的不同员工(不会去重)
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
结果
| E_Name |
|---|
| Zhang, Hua |
| Wang, Wei |
| Carter, Thomas |
| Yang, Ming |
| Adams, John |
| Bush, George |
| Carter, Thomas |
| Gates, Bill |
JOIN 语句
解释
join 用于把来自两个或多个表的行结合起来,基于这些表之间的共享字段,
一般这些表有一个共同的键,这个键可以将这些表连接起来
一般有以下几种用法
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
语法
select A.Num_A, B.Num_B from A insert join B on A.Num_A=B.Num_Bselect A.Num_A, B.Num_B from A left join B on A.Num_A=B.Num_Bselect A.Num_A, B.Num_B from A full join B on A.Num_A=B.Num_B
举个栗子
Person 表
| Id_P | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
Orders 表
| Id_O | OrderNo | Id_P |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
| 5 | 34764 | 65 |
引用两个表
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
结果
| LastName | FirstName | OrderNo |
|---|---|---|
| Adams | John | 22456 |
| Adams | John | 24562 |
| Carter | Thomas | 77895 |
| Carter | Thomas | 44678 |






