学习目标

  • 了解SQL是什么?它有什么作用;
  • 掌握SQL语法
  • 掌握常用SQL函数
  • 使用Navicat操作SQL
  • SQL语句在SQL Server的操作


  • 一、SQL学习

    1.了解SQL

    SQL (Structured Query Language) 是具有数据操纵数据定义等多种功能的数据库语言。SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制
    SQL的作用

  • SQL用来访问和处理数据库中的数据(增删改查)

  • SQL是结构化查询语言(Structured Query Language)

    2.SQL语法

    SQL预备知识

    一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。

    SQL SELECT 语句

    SELECT 语句用于从表中选取数据,结果被存储在一张结果表里。
    1. SELECT 列名称 FROM 表名称
    注释:SQL 语句对大小写不敏感。SELECT 等效于 select。

“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” 的列的数据,使用如下SELECT 语句

SELECT LastName,FirstName FROM Persons

结果:

LastName FirstName
Adams John
Bush George
Carter Thomas

如果想要获取所有列的数据,使用如下SELECT 语句

SELECT * FROM 表名称

结果:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

SQL DISTINCT 语句

如果要从 “Company” 列中选取所有的值,我们需要使用 SELECT 语句:
SELECT Company FROM Orders
“Orders”表:

Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953

结果:

Company
IBM
W3School
Apple
W3School

在表中,可能会包含重复值。关键词 DISTINCT 用于返回唯一不同的值。
如需从 Company” 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:

SELECT DISTINCT Company FROM Orders

SQL WHERE语句

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

下面的运算符可在 WHERE 子句中使用:

操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式

注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
如果只希望选取居住在城市 “Beijing” 中的人,我们需要向 SELECT 语句添加 WHERE 子句:
SELECT FROM Persons WHERE City=’Beijing’
*”Persons” 表

LastName FirstName Address City Year
Adams John Oxford Street London 1970
Bush George Fifth Avenue New York 1975
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

结果:

LastName FirstName Address City Year
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

ORDER BY 语句

ORDER BY 语句用于对结果表的指定例进行排序

  • ORDER BY 默认升序
  • 希望降序,使用 DESC 关键字

以字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company

结果:

Company OrderNumber
Apple 4698
IBM 3532
W3School 6953
W3School 2356

以逆字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

结果:

Company OrderNumber
W3School 6953
W3School 2356
IBM 3532
Apple 4698

SQL LIKE语句

like的作用是在一个字符型字段列中检索包含对应子串。例如我们要在姓名字段中查询以“张”字开头的记录。

select * from table1 where name like '张%'

如果要查询以“张”结尾的记录

select * from table1 where name like '%张'

或查询包含中间“张”的记录

select * from table1 where name like '%张%'

注意:%是通配符表示替代 0 个或多个字符。like常和where搭配使用

SQL IN语句

in语句允许我们在where句后面编写更多的值

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

例如我们要在上表中选取姓氏为Adams 和 Carter 的人

SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

SQL INSERT INTO 语句

INSERT INTO 语句用于向表中插入新的行。
“Persons” 表:

LastName FirstName Address City
Carter Thomas Changan Street Beijing

现在,我们要插入新的一行数据到”Persons” 表中。

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

或者指定字段名
INSERT INTO Persons (LastName, FirstName,Address,City) VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

结果:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing

SQL Update语句

Update 语句用于修改表中的数据。
“Persons” 表:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Champs-Elysees

现在,我们要为lastname 是 “Wilson” 的人修改firstname:

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

结果:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Champs-Elysees

假如我们要修改某一行的多个字段

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'

SQL DELETE 语句

DELETE 语句用于删除表中的行。
“Persons” 表:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Zhongshan 23 Nanjing

现在,我们要删除”Persons” 表所有的行

DELETE FROM Persons

假如我们要删除指定‘’Wilson’行

DELETE FROM Person WHERE LastName = 'Wilson'

SQL Join语句

3.常用SQL函数

AVG()

AVG ()返回数值字段的平均值。NULL 值不包括在计算中。
“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

现在,我们希望计算 “OrderPrice” 字段的平均值。

SELECT AVG(OrderPrice) FROM Orders

结果集类似这样:

OrderAverage
950

MAX()

MAX 函数返回数值字典中的最大值。NULL 值不包括在计算中。
“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

现在,我们希望查找 “OrderPrice” 列的最大值。

select max(ordNumber) as maxNumber from Orders

结果集类似这样:

LargestOrderPrice
2000

MIN()

MIN() 函数返回数值字段中的最小值
“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

现在,我们希望查找 “OrderPrice” 列的最小值。

SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders

结果集类似这样:

SmallestOrderPrice
100

SUM()

NSUM 函数用于返回数值字段的总数
“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

现在,我们希望查找 “OrderPrice” 字段的总数。

select sum(ordNumber) as totalNumber from Orders

结果集类似这样:

OrderTotal
5700

LEN()

LEN()函数返回文本字段中值的长度
“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

现在,我们希望取得 “City” 列中值的长度。

select len(company) as lengthCompany from Orders

结果集类似这样:

LengthOfCity
6
8
7

COUNT()

COUNT()函数返回指定条件字段的数据行数
“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

现在,我们希望计算客户 “Carter” 的订单数。

select count(company) as count from Orders where company='Aliyun'

以上 SQL 语句的结果是 2,因为客户 Carter 共有 2 个订单:

CustomerNilsen
2

如果我们省略 WHERE 子句,比如这样:

SELECT COUNT(*) AS NumberOfOrders FROM Orders

结果集类似这样:

NumberOfOrders
6

这是表中的总行数。

SUBSTRING()

SUBSTRING()从文本字段中提取字符。在某些SQL版本又称mid函数
“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

现在,我们希望从 “City” 列中提取前 3 个字符。

SELECT SUBSTRING(City,1,3) as SmallCity FROM Persons

4.Navicat操作

Navicat简介

“Navicat”是一套可创建多个连接的数据库管理工具,用以方便管理 MySQLOraclePostgreSQLSQLiteSQL ServerMariaDBMongoDB 等不同类型的数据库
特 点
快速、可靠、高效,安全
官网:http://www.navicat.com.cn/

Navicat快捷键

  • 打开一个新的查询窗口 Ctrl + q
  • 关闭当前窗口 Ctrl + w
  • 注释语句 Ctrl + /
  • 执行所有语句 Ctrl + r

总结