SQL 简介
什么是 SQL?
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
SQL 能做什么?
- SQL 面向数据库执行查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
在网站中使用 SQL
要创建发布数据库中数据的网站,您需要以下要素:
- RDBMS 数据库程序(比如 MS Access, SQL Server, MySQL)
- 服务器端脚本语言(比如 PHP 或 ASP)
- SQL
- HTML / CSS
RDBMS
RDBMS 指的是关系型数据库管理系统。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表(tables)的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
SQL语法
数据库表
一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。
例:
id | name | sex | age | address |
---|---|---|---|---|
1 | 小明 | 男 | 13 | eight 213 |
2 | 小红 | 女 | 12 | nine 357 |
3 | 小青 | 女 | 12 | nine 224 |
上面的表包含三条记录(每一条对应一个人)和两个列(Id、名字)。
SQL (structured query language )
结构化查询语言。专门对数据库进行查找、增加、修改、删除、统计的操作语言。
CURD 增删改查 create update retrieve delete。
书写风格:关键字大小写都行,建议大写。表名大小写都行,但是在一些数据库中不区分大小写,建议小写。(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 - 删除索引
(重要) 基础语法
1.查找
SELECT 字段1,字段2,字段3,... FROM 表名;
python中返回值 形如[(1, 502班, 小明, 男), (), ()]。
字段比较多时简写为 SELECT * FROM 表名; 由于数据库执行时会把*转换为字段再执行,性能极微小下降。
SELECT * FROM 表名 WHERE 字段1 = 过滤值,字典2=过滤值 ;
where限定条件查找。
2.添加
INSERT 字段1,字段2,... INTO 表名 VALUES (1, "小明", "男");
简写INSERT INTO 表名 VALUES (1, "小明", "男");
3.修改
UPDATE FROM 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 要修改的那一行那一个字段的值;
注意没有where条件限定行的话将会更新整张表。
4.删除
DELETE FROM 表名;
注意会删除整张表。
DELETE FROM 表名 WHERE 字段1 = 值;
限定条件删除某些行。
5.创建表
CREATE TABLE 表名 {
字段类型 字段名 其它关键字(主键 备注),
INT id PRIMARY KEY,
VARCHAR(20) username ,
}
SQL SELECT
SQL SELECT 语句
SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
SQL SELECT 语法
SELECT 列名称 FROM 表名称
以及:
SELECT * FROM 表名称
注释:SQL 语句对大小写不敏感。SELECT 等效于 select。
SQL SELECT 实例
获取 “name” 和 “age” 的列的内容(从 “students” 的数据库表):
SELECT name,age FROM students
"students"表:
id | name | sex | age | address |
---|---|---|---|---|
1 | 小明 | 男 | 13 | eight 213 |
2 | 小红 | 女 | 12 | nine 331 |
3 | 小青 | 女 | 12 | nine 224 |
结果:
name | age |
---|---|
小明 | 13 |
小红 | 12 |
小青 | 12 |
SQL SELECT * 实例
现在我们希望从 “students” 表中选取所有的列。
使用符号 * 取代列的名称,就像这样:
SELECT * FROM students
提示:星号(*)是选取所有列的快捷方式。
结果:
id | name | sex | age | address |
---|---|---|---|---|
1 | 小明 | 男 | 13 | eight 213 |
2 | 小红 | 女 | 12 | nine 331 |
3 | 小青 | 女 | 12 | nine 224 |
SQL INSERT INTO 语句
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
语法
INSERT INTO 表名称 VALUES (值1, 值2,....)
我们也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
插入新的行
"students"表:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
SQL 语句:
INSERT INTO students VALUES('小刚', '男', '13', 'nine 478')
结果:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
小刚 | 男 | 13 | eight 411 |
在指定的列中插入数据
"students"表:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
小刚 | 男 | 13 | eight 411 |
SQL 语句:
INSERT INTO (name, age) VALUES ('小杨', '13')
结果:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
小刚 | 男 | 13 | eight 411 |
小杨 | 13 |
SQL UPDATE 语句
Update 语句
Update 语句用于修改表中的数据。
语法
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
students表:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
小杨 | 13 |
更新某一行中的一个列
为 name 是 “小杨” 的学生添加 sex :
UPDATE student SET sex= '男' WHERE name= '小杨'
结果:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
小杨 | 男 | 13 |
更新某一行中的若干列
修改 age 和添加 address :
UPDATE student SET age='14', address='eight 230' WHERE name='小杨'
结果:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
小杨 | 男 | 14 | eight 230 |
SQL DELETE 语句
DELETE 语句
DELETE 语句用于删除表中的行。
语法
DELETE FROM 表名称 WHERE 列名称 = 值
"students"表:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
小杨 | 男 | 14 | eight 230 |
删除某行
“小杨”会被删除:
DELETE FROM student WHERE name='小杨'
结果:
name | sex | age | address |
---|---|---|---|
小青 | 女 | 12 | nine 224 |
删除所有行
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
SQL WHERE 子句
WHERE 子句用于规定选择的标准。
WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
下面的运算符可在 WHERE 子句中使用:
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
使用 WHERE 子句
如果只希望选取年龄age是"13" 中的人,我们需要向 SELECT 语句添加 WHERE 子句:
SELECT * FROM students WHERE age='13'
"students"表:
name | sex | age | address | year |
---|---|---|---|---|
小明 | 男 | 13 | eight 213 | 2005 |
小红 | 女 | 12 | nine 357 | 2006 |
小青 | 女 | 12 | nine 224 | 2006 |
小刚 | 男 | 13 | eight 411 | 2005 |
结果:
name | sex | age | address | year |
---|---|---|---|---|
小明 | 男 | 13 | eight 213 | 2005 |
小刚 | 男 | 13 | eight 411 | 2005 |
引号的使用
请注意,我们在例子中的条件值周围使用的是单引号。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
文本值:
这是正确的:
SELECT * FROM students WHERE name='小明'
这是错误的:
SELECT * FROM students WHERE name=小明
数值:
这是正确的:
SELECT * FROM students WHERE year>2005
这是错误的:
SELECT * FROM students WHERE year>'2005'