SQL语法(待完善)
SQL
Structured Query Language 结构化查询语言
定义了操作关系性数据库的规则
存在一定的版本之间的差异
1.1 SQL概述
- SQL 语句以单行,多行书写,以分号结尾
- 不区分大小写 关键字建议大写
- -- 单行注释 # 注释内容
- /* 多行注释 */
结构化查询语言
SQL 是用于访问和处理数据库的标准的计算机语言
与数据库系统进行交流的语言,通过SQL对数据库进行操作
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
存在着很多不同版本的 SQL 语言
除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的私有扩展
1.2 在您的网站中使用 SQL
要创建发布数据库中数据的网站,您需要以下要素:
- RDBMS 数据库程序(比如 MS Access, SQL Server, MySQL)
- 服务器端脚本语言(比如 PHP 或 ASP)
- SQL
- HTML / CSS
您需要在数据库上执行的大部分工作都由 SQL 语句完成
SQL对大小写不敏感
某些数据库系统要求在每条 SQL 命令的末端使用分号,这样就可以在对服务器的相同请求中执行一条以上的语句
从表中选取LastName列的数据
SELECT LastName FROM Persons
1.3 关于Mysql
1.3.1 介绍
关系型数据库管理系统,SQL是语言,mysql是管理系统
MySQL服务启动
-
管理员模式打开cmd
-
mysql -uroot -p
MySQL登录, 退出
- mysql -uroot -proot
- exit quit
MySQL目录结构
- 数据库:文件夹
- 表:文件
- 数据:文件中存储的字节
SELECT [ALL|DISTINCT] <列名> as <别称> [,<表名> as <别称> ].... FROM <表名> as <别称> [,<表名> as <别称> ]....
where <条件>
GROUP BY <列名>
HAVING <条件>
ORDER BY <列名> [ASC|DESC]
2.1 DML DDL
把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)
DML(Data Manipulation Language)
DDL (Data Definition Language)
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
数据定义语言 (DDL) 使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束
2.2 SQL 中最重要的 DDL 语句:
** 创建表时,列名和表名需要采用反引号
``
或者不采用任何符号
CREATE DATABASE - 创建新数据库
-- CREATE DATABASE school;
USE school; -- 使用数据库 school
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
CREATE TABLE 'student'(
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NOT NULL
); -- 常见类型有 int, char, varchar, datetime
-- char 字节数固定 varchar 会根据数据调整字节长度
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
2.3 SELECT 和 SELECT * 语句
SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)
SQL语法
SELECT 列名称 FROM 表名称
或者
SELECT * FROM 表名称
获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表)
SELECT LastName,FirstName FROM Persons
- 从 "Persons" 表中选取所有的列。
请使用符号 * 取代列的名称,就像这样:
星号(*)是选取所有列的快捷方式
SELECT * FROM Persons
- 在结果集(result-set)中导航
由 SQL 查询程序获得的结果被存放在一个结果集中。大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。
2.4 SQL SELECT DISTINCT 语句
关键词 DISTINCT 用于返回唯一不同的值
SELECT DISTINCT 列名称 FROM 表名称
如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句
SELECT Company FROM Orders
2.5 SQL WHERE 子句
WHERE 子句用于规定选择的标准
有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值;
如果只希望选取居住在城市 "Beijing" 中的人,我们需要向 SELECT 语句添加 WHERE 子句:
SELECT * FROM Persons WHERE City='Beijing'
- SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号
文本值:
这是正确的:
SELECT * FROM Persons WHERE FirstName='Bush'
这是错误的:
SELECT * FROM Persons WHERE FirstName=Bush
数值:
这是正确的:
SELECT * FROM Persons WHERE Year>1965
这是错误的:
SELECT * FROM Persons WHERE Year>'1965'
2.6 SQL AND & OR 运算符
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤
与语言中的 and or 用法相同
使用 AND 来显示所有姓为 "Carter" 并且名为 "Thomas" 的人:
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
我们也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
2.7 SQL ORDER BY 子句
ORDER BY 语句用于对结果集进行排序
默认为升序,使用DESC关键字改为降序
以字母顺序显示公司名称:
从Orders表中选中 company,ordernumber列进行操作
SELECT Company, OrderNumber FROM Orders ORDER BY Company
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
注意:当结果中列出现相同数据。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。
2.8 SQL INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行
语法
insert 插入 value 值
INSERT INTO 表名称 VALUES (值1, 值2,....)
我们也可以指定所要插入数据的列:
table 表
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
插入新的行
"Persons" 表:
LastName | FirstName | Address | City |
---|---|---|---|
Carter | Thomas | Changan Street | Beijing |
SQL 语句:
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
结果:
LastName | FirstName | Address | City |
---|---|---|---|
Carter | Thomas | Changan Street | Beijing |
Gates | Bill | Xuanwumen 10 | Beijing |
在指定的列中插入数据
"Persons" 表:
LastName | FirstName | Address | City |
---|---|---|---|
Carter | Thomas | Changan Street | Beijing |
Gates | Bill | Xuanwumen 10 | Beijing |
SQL 语句:
指定数据添加
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 |
2.9 SQL UPDATE 语句
Update 语句用于修改表中的数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
Person:
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 |
更新某一行中的若干列
我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
结果:
LastName | FirstName | Address | City |
---|---|---|---|
Gates | Bill | Xuanwumen 10 | Beijing |
Wilson | Fred | Zhongshan 23 | Nanjing |
2.10 SQL DELETE 语句
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
或者:
2.11 建表语句
CREATE TABLE 'STUDENT'(
'ID' INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 'NAME' VARCHAR(200) NOT NULL
);
--int 指定了数据类型
--NOT NULL 指定了数据不可谓空
--PRIMARY KEY 必须有元素为关键 此元素不可重复
2.12 数据常见类型
int, char, varchar, datetime
--char 与 varchar 的区别
--char 指定大小后 char(200),无论数据多大,都会分配200个内存
--varchar 会根据数据大小来分配内存,最大为200(指定的数)
--datetime 日期,时间
2.13 插入语句
INSERT INTO '表名' VALUE(2,'张三');
--VALUE 代表第一条记录 值
--指定插入
INSERT INTO '表名' ('NAME', 'ID', 'NICKNAME','DATATINE') VALUE('张三', '2344', '三哥', '2019.02.02');
--多条插入
INSERT INTO '表名' VALUE
('张三1', '三哥'),
('张三2', '三哥1'),
('张三3', 'sange2')
;
2.14 查询语句
--按条件查询
SELECT ID NAME FRON SCHOOLDOG WHERE ID = 1 ORDER BY ID DESC;
SELECT 后面指定了要查询的列,FROM 指定了要查询的表,WHERE 为条件
ORDER BY ID 以ID正序排列
DESC属性 倒叙
分页查询
SELECT ID, NAMEE FROM schooldog WHERE ID > 0 ORDER BY ID LIMIT x, y;
--LIMIT 为分页
--LIMIT [第一条数据的索引],[本次打印数据的数量]
3.1 数据库的备份
- 命令行的方式
mysqldump -u用户名 -p密码 > 保存路径
若无密码 则为空
在指定位置生成
备份指定数据库
mysqldump -uroot -p 数据库名称 > 指定位置
a.sql文件内容
还原数据库
先删除
查看现有数据库 show databases;
删除数据库 school
drop database school;
show databases;
-- 先创建数据库
create database school;
-- 使用数据库
use school;
-- 使用备份
source d://a.sql;
-- 查看
show tables;
- Navicat
直接点击备份即可