SQL 数据库 基础

1 选择  SELECT

SELECT name,country FROM Websites;
列出不同(distinct)的值
SELECT DISTINCT country FROM Websites;
SELECT * FROM Websites LIMIT 2;
SELECT 50 percent FROM Websites;

 2  限制  WHERE

SELECT * FROM Websites WHERE country='CN';
Select * from emp where comm is null;
Select * from emp where sal (not) between 1500 and 3000;
Select * from emp where sal (not) in (5000,3000,1500);
Select * from emp where ename (not) like 'M%';
% 表示多个字值,_ 下划线表示一个字符;
M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 双百分号表示查询的信息在内容中间。
%M_% : 表示查询的字母在内容的倒数第二位。


WHERE正则表达式
where name (not) REGEXP '^[QFS]

AND
SELECT * FROM Websites WHERE country='CN' AND [OR] alexa > 50;

3 排序 ORDER BY

SELECT * FROM Websites ORDER BY alexa;
降序排序
SELECT * FROM Websites ORDER BY alexa DESC;


4  插入数据 INSERT INTO

INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度','https://www.baidu.com/','4','CN');



5 更新数据 UPDATE

UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';

6 删除数据 DELETE

DELETE FROM Websites WHERE name='百度' AND country='CN';


7 别名

SELECT name AS n, country AS c FROM Websites;


8 连接 JOIN

SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行


9 合并 UNION

UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值)

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;


10 复制 SELECT INTO

创建 Websites 的备份复件
SELECT *
INTO WebsitesBackup2016
FROM Websites;


11 复制 插入另一个表 INSERT INTO SELECT

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;



12 创建数据库 CREATE DATABASE 

CREATE DATABASE my_db;

删除数据库
DROP DATABASE 语句用于删除数据库。
DROP DATABASE database_name



13 创建数据表 CREATE TABLE

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
约束 Constraints
NOT NULL 指示某列不能存储 NULL 值。
UNIQUE 保证某列的每行必须有唯一的值。
PRIMARY KEY NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK 保证列中的值符合指定的条件。
DEFAULT 规定没有给列赋值时的默认值。

删除数据表
DROP TABLE 语句用于删除表。

DROP TABLE table_name
如果我们仅仅需要删除表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 语句:
TRUNCATE TABLE table_name



14 创建索引 CREATE INDEX

您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

下面的 SQL 语句在 "Persons" 表的 "LastName" 列上创建一个名为 "PIndex" 的索引:

CREATE INDEX PIndex
ON Persons (LastName)
DROP INDEX 语句用于删除表中的索引。
用于 MS Access 的 DROP INDEX 语法:
DROP INDEX index_name ON table_name
用于 MS SQL Server 的 DROP INDEX 语法:
DROP INDEX table_name.index_name
用于 DB2/Oracle 的 DROP INDEX 语法:
DROP INDEX index_name
用于 MySQL 的 DROP INDEX 语法:
ALTER TABLE table_name DROP INDEX index_name



15 添加、删除或修改列  ALTER TABLE

现在,我们想在 "Persons" 表中添加一个名为 "DateOfBirth" 的列。

ALTER TABLE Persons
ADD DateOfBirth date
请注意,新列 "DateOfBirth" 的类型是 date,可以存放日期。


改变数据类
现在,我们想要改变 "Persons" 表中 "DateOfBirth" 列的数据类型
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year
DROP COLUMN
删除 "Person" 表中的 "DateOfBirth" 列

ALTER TABLE Persons
DROP COLUMN DateOfBirth




16 新记录插入表中时生成一个唯一的数字  AUTO INCREMENT


下面的 SQL 语句把 "Persons" 表中的 "ID" 列定义为 auto-increment 主键字段:

CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下面的 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100



17 视图 Views

创建视图
视图 "Current Product List" 会从 "Products" 表列出所有正在使用的产品(未停产的产品)。这个视图使用下面的 SQL 创建:

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
我们可以像这样查询上面这个视图:
SELECT * FROM [Current Product List]

更新视图

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No


撤销视图

DROP VIEW view_name



18 日期函数 Dates


MySQL Date 函数

NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间的单独部分
DATE_ADD() 向日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT()用不同的格式显示日期/时间

SQL Server Date 函数
GETDATE() 返回当前的日期和时间
DATEPART() 返回日期/时间的单独部分
DATEADD() 在日期中添加或减去指定的时间间隔
DATEDIFF() 返回两个日期之间的时间
CONVERT() 用不同的格式显示日期/时间



19 空值 NULL


ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数



20 通用数据类型

数据类型 描述

数据类型 描述
CHARACTER(n) 字符/字符串。固定长度 n。
VARCHAR(n)或
CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。
BINARY(n) 二进制串。固定长度 n。
BOOLEAN 存储 TRUE 或 FALSE 值
VARBINARY(n) 或
BINARY VARYING(n) 二进制串。可变长度。最大长度 n。
INTEGER(p) 整数值(没有小数点)。精度 p。
SMALLINT 整数值(没有小数点)。精度 5。
INTEGER 整数值(没有小数点)。精度 10。
BIGINT 整数值(没有小数点)。精度 19。
DECIMAL(p,s) 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数小数点后有 2 位数的数字。
NUMERIC(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同)
FLOAT(p) 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。
REAL 近似数值,尾数精度 7。
FLOAT 近似数值,尾数精度 16。
DOUBLE PRECISION 近似数值,尾数精度 16。
DATE 存储年、月、日的值。
TIME 存储小时、分、秒的值。
TIMESTAMP 存储年、月、日、小时、分、秒的值。
INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。
ARRAY 元素的固定长度的有序集合
MULTISET 元素的可变长度的无序集合
XML 存储 XML 数据


21 用于各种数据库的数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值