暑假补课资料-数据库
暑假补课资料-数据库什么是数据库?数据库种类数据库基础术语SQL与数据库的关系DML 和 DDLSELECTDISTINCTWHERELIKE通配符AND 和 ORINBETWEENORDER BYLIMITINSERT INTOUPDATEDELETE进阶语法CREATE DATABASECREATE TABLECREATE INDEX *DROPALTER TABLE
什么是数据库?
你知道你玩儿完玩具之后怎么收拾玩具,才能让你下回能轻松找到它们吧?
「数据库」就像是你收玩具的那个架子,只不过它是收「数据」的。
现在,在「数据库」里可以很方便的找到「数据」——不管是找「所有恐龙玩具」还是「所有黄色玩具」,电脑可以很快的给你找出来让你玩,因为它们在数据库里。
每时每刻我们都可以获得大量的数据,如果想要把这些数据整理存储下来,我们应该怎么做?
我们可以将数据存储在文件中,但是在文件中读写数据速度慢,数据量大的话效率就很低。
所以有了数据库专门来存储,管理数据。用数据库处理量大的数据会比直接存到文件中要快很多。
数据库种类
总的来说数据库分成两类:关系型数据库 和 非关系型数据库(nosql)
类型 | 代表 | 特性 |
---|---|---|
关系型 | Mysql,Oracle | 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 |
非关系型 | Redis,MongoDB,Hbase | 使用键值(key - value)对存储数据; |
数据库基础术语
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
SQL与数据库的关系
SQL 是用于访问和处理数据库的标准的计算机语言。
DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
查询和更新指令构成了 SQL 的 DML 部分:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL 中最重要的 DDL 语句:
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
DROP DATABASE - 删除数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
实例表,表名"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 |
SELECT
SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。
SELECT 语法
SELECT 列名称 FROM 表名称;
以及:
SELECT * FROM 表名称;
SELECT 实例
SELECT LastName,FirstName FROM Persons;
SELECT * FROM Persons;
DISTINCT
在表中,可能会包含重复值。如果需要只列出不同(distinct)的值,就会用到关键词 DISTINCT 。
关键词 DISTINCT 用于返回唯一不同的值
SELECT DISTINCT 语法
SELECT DISTINCT 列名称 FROM 表名称;
SELECT DISTINCT * FROM 表名称;
SELECT DISTINCT 实例
SELECT DISTINCT LastName FROM Persons;
WHERE
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
where 语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值;
下面的运算符可在 WHERE 子句中使用:
操作符 | 描述 |
---|---|
= | 等于 |
<> (mysql里一般用 != ) | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
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';
LIKE
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。(简单说就是模糊查询)
语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
实例 1
现在,我们希望从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人:
SELECT * FROM Persons
WHERE City LIKE 'N%'
提示:"%" 可用于定义通配符(模式中缺少的字母)
实例 2
接下来,我们希望从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:
SELECT * FROM Persons
WHERE City LIKE '%g'
实例 3
接下来,我们希望从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:
SELECT * FROM Persons
WHERE City LIKE '%lon%'
实例 4
通过使用 NOT 关键字,我们可以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:
SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'
通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何单一字符 |
实例
现在,我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
AND 和 OR
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
AND 运算符实例
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter';
OR 运算符实例
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter';
IN
IN 操作符允许我们在 WHERE 子句中规定多个值。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
实例
现在,我们希望从表中选取姓氏为 Adams 和 Carter 的人:
SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter');
BETWEEN
操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。ASC
如果希望按照降序对记录进行排序,可以使用 DESC 关键字。
order by 实例
SELECT LastName,FirstName FROM Persons ORDER BY LastName;
SELECT LastName,FirstName FROM Persons ORDER BY LastName ASC,FirstName DESC;
LIMIT
limit子句用于规定要返回的记录的数目。对于拥有数千条记录的大型表来说,limit子句是非常有用的。
语法
SELECT column_name(s)
FROM table_name
LIMIT number
实例
SELECT *
FROM Persons
LIMIT 5;
INSERT INTO
INSERT INTO 语句用于向表格中插入新的行。
语法
INSERT INTO 表名称 VALUES (值1, 值2,....);
我们也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);
实例
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
UPDATE
Update 语句用于修改表中的数据。
语法
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
实例
UPDATE Person SET Address = 'Hangzhou';
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson';
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson';
DELETE
DELETE 语句用于删除表中的行。
语法
DELETE FROM 表名称 WHERE 列名称 = 值;
实例
DELETE FROM Person WHERE LastName = 'Wilson';
DELETE FROM Person;
DELETE * FROM Person;
TRUNCATE TABLE 语句 (删除表中所有的数据)
TRUNCATE TABLE 表名称
进阶语法
CREATE DATABASE
CREATE DATABASE 用于创建数据库。
语法
CREATE DATABASE database_name;
实例
CREATE DATABASE my_db;
CREATE TABLE
CREATE TABLE 语句用于创建数据库中的表。
语法
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
);
数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:
数据类型 | 描述 |
---|---|
integer(size) int(size) smallint(size) tinyint(size) | 仅容纳整数。在括号内规定数字的最大位数。 |
decimal(size,d) numeric(size,d) | 容纳带有小数的数字。"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。 |
char(size) | 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。 |
varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
实例
本例演示如何创建名为 "Person" 的表。
该表包含 5 个列,列名分别是:"Id"、"LastName"、"FirstName"、"Address" 以及 "City":
CREATE TABLE Persons
(
Id int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Id 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符。
空的 "Persons" 表类似这样:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
可使用 INSERT INTO 语句向空表写入数据。
CREATE INDEX *
用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
介绍
在表中创建索引,可以更加快速高效地查询数据。而且用户无法看到索引,它们只能被用来加速搜索/查询。
使用索引要注意:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更
新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
语法
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name);
实例
本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndex
ON Person (LastName)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex
ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)
DROP
通过使用 DROP 语句,可以轻松地删除索引、表和数据库
DROP DATABASE 用于删除数据库
DROP DATABASE 数据库名称
DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除)
DROP TABLE 表名称
Mysql删除索引语句 *
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
语法
如需在表中添加列,请使用下列语法:
ALTER TABLE table_name
ADD column_name datatype
要删除表中的列,请使用下列语法:
ALTER TABLE table_name
DROP COLUMN column_name
注释:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。
要改变表中列的数据类型,请使用下列语法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype