数据库

数据库基础知识整理

语句

select * from tablename;//搜索

select distinct columname from tablename;//搜索并展示的是不同的值,去重

select * from tablename where id=2;//条件查询

where 运算符:
= 等于  <>不等于  >大于  <小于  >=大于等于   <=小于等于  between 自某个范围内   like 搜索某种模式    in 置顶针对某个列的多个可能值
Select * from emp where sal > 2000 and sal < 3000;//And:与 同时满足两个条件的值。
Select * from emp where sal > 2000 or comm > 500;//Or:或 满足其中一个条件的值
select * from emp where not sal > 1500;//Not:非 满足不包含该条件的值。
逻辑运算的优先级:
()    not        and         or
Select * from emp where comm is null;//空值判断
Select * from emp where sal between 1500 and 3000;//between and (在 之间的值)
Select * from emp where sal in (5000,3000,1500);//查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。
Select * from emp where ename like 'M%';//Like模糊查询
查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。
 % 表示多个字值,_ 下划线表示一个字符;
 M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
 %M% : 表示查询包含M的所有内容。
 %M_ : 表示查询以M在倒数第二位的所有内容
 '_a_'    //三位且中间字母是a的
'_a'    //两位且结尾字母是a的
'a_'    //两位且开头字母是a的
order by column_name,column_name ASC DESC; 排序升/降

INSERT INTO table_name (column1,column2,column3,…) VALUES (value1,value2,value3,…);//插入值

UPDATE table_name SET column1=value1,column2=value2,… WHERE some_column=some_value;//更新已存在的记录

DELETE FROM table_name WHERE some_column=some_value;//删除行

DROP test;//删除表

TRUNCATE test;//删除表内容,不删除表

SELECT TOP number|percent column_name(s) FROM table_name;//规定要返回的记录的数目

MySQL写法:SELECT column_name(s) FROM table_name LIMIT number;

Oracle写法:SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;

SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';//正则写法

between实例

SELECT * FROM Websites
WHERE alexa NOT BETWEEN 1 AND 20;
SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND NOT country IN ('USA', 'IND');
SELECT * FROM Websites
WHERE name BETWEEN 'A' AND 'H';
SELECT * FROM access_log
WHERE date BETWEEN '2016-05-10' AND '2016-05-14';

别名

列的 SQL 别名语法
SELECT column_name AS alias_name
FROM table_name;
表的 SQL 别名语法
SELECT column_name(s)
FROM table_name AS alias_name;

连接

用于2个或以上的表之间的操作:

普通连接: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: 关键字在表中存在至少一个匹配时返回行

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
#INNER JOIN 与 JOIN 是相同的,交集AnB

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;#A and AnB

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
或:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;#AnB and B

详见菜鸟

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;#A and B

高级语法

UNION 操作符用于合并两个或多个 SELECT 语句的结果集

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;#允许重复的值,请使用 UNION AL

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中,MySQL 数据库不支持 SELECT … INTO 语句,但支持 INSERT INTO … SELECT

SELECT * INTO newtable [IN externaldb] FROM table1;

INSERT INTO table2 SELECT * FROM table1;

CREATE DATABASE 语句用于创建数据库:CREATE DATABASE dbname;

CREATE TABLE 语句用于创建数据库中的表

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

SQL 约束:

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

MySQL写法:ALTER TABLE Persons DROP PRIMARY KEY#撤销KEY约束 ALTER TABLE Orders

SQL Server / Oracle / MS Access写法:DROP CONSTRAINT fk_PerOrders

CREATE INDEX 语句用于在表中创建索引

CREATE INDEX index_name ON table_name (column_name)#允许重复

CREATE UNIQUE INDEX index_name ON table_name (column_name)#不允许重复

通过使用 DROP 语句,可以轻松地删除索引、表和数据库,详见

ALTER TABLE 语句用于在已有的表中添加、删除或修改列,详见

Auto-increment 会在新记录插入表中时生成一个唯一的数字:ID int NOT NULL AUTO_INCREMENT,

SQL Date 函数
SQL 通用数据类型
SQL 用于各种数据库的数据类型