SQL基础

SQL基础
lieyan16SQL 对大小写不敏感!
SQL的全名是”Structured Query Language”
SQL 语句后面的分号?
某些数据库系统要求在每条 SQL 命令的末端使用分号。在我们的教程中不使用分号。
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。
如果您使用的是 MS Access 和 SQL Server 2000,则不必在每条 SQL 语句之后使用分号,不过某些数据库软件要求必须使用分号。
SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
SELECT语句
在表中读取一个数据
语法
1 | SELECT 列名称 FROM 表名称 |
以及
1 | SELECT * FROM 表名称 //sql不在意大小写写成select和SELECT效果一样 |
举个例子
1 | SELECT lastNAME,FirstName FROM persons |
含义在persons中调用出名为lastName和 FirstName的列
如果要选出所以的列可以用 星号*(星号是所有列的快捷方式)
1 | SELECT * FROM persons |
这样将会选取所以的列
LIMIT 限制输出行 LIMIT 加在语句最后方,LIMIT 2限制输出2行
SUM 求选取数的总和
SELECT DISTINCT 语句
在表中如果有重复的语句,SELECT DISTINCT 可以仅返回唯一不同的值
举个例子 “Orders”表:
| Company | OrderNumber |
|---|---|
| IBM | 3532 |
| W3School | 2356 |
| Apple | 4698 |
| W3School | 6953 |
1 | SELECT DISTINCT Company FROM Orders |
WHERE 子句
可以有条件的在表中选出 可将WHERE子句添加到SELECT语句
语法:
1 | SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 |
2个没有见过的运算符
| 操作符 | 描述 |
|---|---|
| LIKE | 搜索某种模式 |
| BETWEEN | 在某个范围内 |
举个例子 “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 |
1 | SELECT * FROM Persons WHERE Ctiy = 'beijing' //注意! 等于后值要用引号包起来,否则不对 |
返回结果
| LastName | FirstName | Address | City | Year |
|---|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing | 1980 |
| Gates | Bill | Xuanwumen 10 | Beijing | 1985 |
引号的使用
请注意,我们在例子中的条件值周围使用的是单引号。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
文本值:
1 | 这是正确的: |
数值:
1 | 这是正确的: |
AND 和 OR 运算符
AND和OR可以在WHERE子语句中 把两个或多个条件结合起来。
如果想让第一个和第二个条件都成立,则可以用AND运算符
如果想让第一个条件和第二个条件中只要有一个成立,则可以用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 |
使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人:
1 | SELECT * FROM Persons WHERE LastName = 'Carter' or FirstName = 'Thomas' |
OR也可以和AND结合起来使用 用括号包起来组成复杂的表达式
1 | SELECT * FROM Persons WHERE (LastName = 'Carter' or FirstName = 'Thomas')AND LastName = 'Carter' |
ORDER BY 子句
ORDER BY 语句用于对结果集体进行排序
ORDER BY 语句默认按照升序对记录进行排序 如果想按照降序可使用DESC关键字原始的表 (用在例子中的):
举个例子 Orders 表:
| Company | OrderNumber |
|---|---|
| IBM | 3532 |
| W3School | 2356 |
| Apple | 4698 |
| W3School | 6953 |
1 | SELECT Company,OrderNumber FROM Orders ORDER BY Company //以字母顺序显示公司名称 |
结果:
| Company | OrderNumber |
|---|---|
| Apple | 4698 |
| IBM | 3532 |
| W3School | 6953 |
| W3School | 2356 |
实例 2
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
1 | SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber |
结果:
| Company | OrderNumber |
|---|---|
| Apple | 4698 |
| IBM | 3532 |
| W3School | 2356 |
| W3School | 6953 |
实例 3
以逆字母顺序显示公司名称:
1 | SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC |
结果:
| Company | OrderNumber |
|---|---|
| W3School | 6953 |
| W3School | 2356 |
| IBM | 3532 |
| Apple | 4698 |
实例 4
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
1 | SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC // DESC 降序 ASC 升序 |
结果:首先按照”Company”列进行降序排序,对于相同的”Company”值,再按照”OrderNumber”列进行升序
| Company | OrderNumber |
|---|---|
| W3School | 2356 |
| W3School | 6953 |
| IBM | 3532 |
| Apple | 4698 |
注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
INSERT INTO 语句
INSERT INTO 用于向表格中插入新的行。 语法
1 | INSERT INTO 表名称 VALUES (值1,值2,...............) |
VALUES 子句 用与指定要插入的具体值
举个例子”Persons” 表:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
如果要在这个表中插入一个新的行
1 | INSERT INTO Persons VALUES ('1','2','3','4') //输出下面的表格 |
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| 1 | 2 | 3 | 4 |
如果想要在指定的列中插入数据
1 | INSERT INTO Persons(LasrName,Address) VALUES ('Jak','popo') |
执行后的
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Jak | popo |
Update 语句
Update语句用与修改表中的数据
语法
UPDATE 表名称 SET列名称 = 新增 WHERE 列名称 = 某值
1 | UPDATE Persons SET City = 'ppone' where Address = 'ol' |
这行代码的意思 将 Address中为 ol的city改为 ppone
DELETE 语句
DELETE 语句用于删除表中的行
语法
1 | DELETE FROM 表名称 WHERE 列名称 = 值 |
举个例子
1 | DELETE FROM 表名称 WHERE 列名称 = 值 |
LENGTH 获取长度





