[关闭]
@WillireamAngel 2018-03-09T06:25:50.000000Z 字数 7312 阅读 3249

SQL菜鸟教程

数据库


SQL教程

SQL:Structured Query Language(结构化查询语言)
RDBMS:Relational Database Management System(关系型数据库管理系统 )

SQL语法

SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

use DB:选择数据库
set names utf8:设置使用字符集

SQL SELECT 语句

  1. SELECT column_name,column_name
  2. FROM table_name;

or

  1. SELECT * FROM table_name;

SQL SELECT DISTINCT 语句

列出不同的值

  1. SELECT DISTINCT column_name,column_name
  2. FROM table_name;

SQL WHERE 子句

提取满足标准的记录

  1. SELECT column_name,column_name
  2. FROM table_name
  3. WHERE column_name operator value;

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号),数值字段勿用引号。

运算符 描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
=
大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

Where 子句

  1. Select * from emp where empno=7900;

Where +条件(筛选行)
条件:列,比较运算符,值
比较运算符包涵:= > < >= ,<=, !=,<> 表示(不等于)

  1. Select * from emp where ename='SMITH';

例子中的 SMITH 用单引号引起来,表示是字符串,字符串要区分大小写。

逻辑运算
And:与 同时满足两个条件的值。

  1. Select * from emp where sal > 2000 and sal < 3000;

查询 EMP 表中 SAL 列中大于 2000 小于 3000 的值。

Or:或 满足其中一个条件的值

  1. Select * from emp where sal > 2000 or comm > 500;

查询 emp 表中 SAL 大于 2000 或 COMM 大于500的值。

Not:非 满足不包涵该条件的值。

  1. select * from emp where not sal > 1500;

查询EMP表中SAL小于1500的值。

逻辑运算的优先级:() not and or
特殊条件
1.空值判断: is null

  1. Select * from emp where comm is null;

查询 emp 表中 comm 列中的空值。

2.between and (在 之间的值)

  1. Select * from emp where sal between 1500 and 3000;

查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。
注意:1500 为下限,3000 为上限,下限在前,上限在后,查询的范围包涵有上下限的值。

3.In

  1. Select * from emp where sal in (5000,3000,1500);

查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。

4.like

Like模糊查询

  1. Select * from emp where ename like 'M%';

查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。

% 表示多个字值,_ 下划线表示一个字符;
M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 表示查询包含M的所有内容。
%M_ : 表示查询以M在倒数第二位的所有内容。

SQL ORDER BY

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

  1. SELECT column_name,column_name
  2. FROM table_name
  3. ORDER BY column_name,column_name ASC|DESC;

SQL INSERT INTO

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

  1. INSERT INTO table_name
  2. VALUES (value1,value2,value3,...);

第二种形式需要指定列名及被插入的值:

  1. INSERT INTO table_name (column1,column2,column3,...)
  2. VALUES (value1,value2,value3,...);

SQL UPDATE

更新表中记录,执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。

  1. UPDATE table_name
  2. SET column1=value1,column2=value2,...
  3. WHERE some_column=some_value;

SQL DELETE

删除表中的行

  1. DELETE FROM table_name
  2. WHERE some_column=some_value;

SQL 高级教程

SQL SELECT TOP, LIMIT, ROWNUM 子句

用于规定返回子句

  1. SELECT column_name(s)
  2. FROM table_name
  3. LIMIT number;
  1. SELECT TOP 50 PERCENT * FROM Websites;

SQL LIKE

搜索列的指定模式

  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE column_name LIKE pattern;

SQL 通配符

通配符与SQL操作符一起使用,用于搜索表中的数据。

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或[!charlist] 不在字符

SQL IN

子句规定多个值

  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE column_name IN (value1,value2,...);

IN 与 = 的异同:
- 相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义
- 不同点:IN可以规定多个值,等于规定一个值

SQL BETWEEN

选取介于两个值之间的数据范围内的值。

  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE column_name BETWEEN value1 AND value2;

SQL 别名

通过使用 SQL,可以为表名称或列名称指定别名。
列的 SQL 别名语法

  1. SELECT column_name AS alias_name
  2. FROM table_name;

表的 SQL 别名语法

  1. SELECT column_name(s)
  2. FROM table_name AS alias_name;

使用别名情况:
- 在查询中涉及超过一个表
- 在查询中使用了函数
- 列名称很长或者可读性差
- 需要把两个列或者多个列结合在一起

SQL 连接(JOIN)

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
INNER JOIN:如果表中有至少一个匹配,则返回行

  1. SELECT column_name(s)
  2. FROM table1
  3. INNER JOIN table2
  4. ON table1.column_name=table2.column_name;

or

  1. SELECT column_name(s)
  2. FROM table1
  3. JOIN table2
  4. ON table1.column_name=table2.column_name;

INNER JOIN

LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行

  1. SELECT column_name(s)
  2. FROM table1
  3. LEFT JOIN table2
  4. ON table1.column_name=table2.column_name;

or

  1. SELECT column_name(s)
  2. FROM table1
  3. LEFT OUTER JOIN table2
  4. ON table1.column_name=table2.column_name;

LEFT JOIN

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

  1. SELECT column_name(s)
  2. FROM table1
  3. RIGHT JOIN table2
  4. ON table1.column_name=table2.column_name;

or

  1. SELECT column_name(s)
  2. FROM table1
  3. RIGHT OUTER JOIN table2
  4. ON table1.column_name=table2.column_name;

LEFT JOIN

FULL JOIN:只要其中一个表中存在匹配,则返回行

  1. SELECT column_name(s)
  2. FROM table1
  3. FULL OUTER JOIN table2
  4. ON table1.column_name=table2.column_name;

LEFT JOIN

SQL UNION

合并两个或多个SELECT语句的结果集
UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

  1. SELECT column_name(s) FROM table1
  2. UNION
  3. SELECT column_name(s) FROM table2;

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

  1. SELECT column_name(s) FROM table1
  2. UNION ALL
  3. SELECT column_name(s) FROM table2;

SQL SELECT INTO

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

  1. CREATE TABLE 新表 SELECT * FROM 旧表

复制所有的列插入到新表中:

  1. SELECT *
  2. INTO newtable [IN externaldb]
  3. FROM table1;

只复制希望的列插入到新表中:

  1. SELECT column_name(s)
  2. INTO newtable [IN externaldb]
  3. FROM table1;

SQL INSERT INTO SELECT

从一个表复制数据,然后把数据插入到一个已存在的表中。
从一个表中复制所有的列插入到另一个已存在的表中:

  1. INSERT INTO table2
  2. SELECT * FROM table1;

或者只复制希望的列插入到另一个已存在的表中:

  1. INSERT INTO table2
  2. (column_name(s))
  3. SELECT column_name(s)
  4. FROM table1;

SQL CREATE DB

创建DB

  1. CREATE DATABASE dbname;

SQL CREATE TABLE

CREATE TABLE 语句用于创建数据库中的表。
表由行和列组成,每个表都必须有个表名。

  1. CREATE TABLE table_name
  2. (
  3. column_name1 data_type(size),
  4. column_name2 data_type(size),
  5. column_name3 data_type(size),
  6. ....
  7. );

column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。

SQL 约束

SQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。

  1. CREATE TABLE table_name
  2. (
  3. column_name1 data_type(size) constraint_name,
  4. column_name2 data_type(size) constraint_name,
  5. column_name3 data_type(size) constraint_name,
  6. ....
  7. );

约束:
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

  1. create table tb2(
  2. tb2_id int unique,
  3. tb2_name varchar(20),
  4. tb2_age int,
  5. unique(tb2_name)
  6. );
  1. select * from tb2;
  2. insert into tb2(tb2_id,tb2_name,tb2_age) values (1,'张三',20);

--违反唯一约束

  1. insert into tb2 values(2,'张三',25);

--建表时,创建约束,有约束名

  1. create table tb3(
  2. tb3_id int ,
  3. tb3_name varchar(20),
  4. tb3_age int,
  5. constraint no_id unique (tb3_id)
  6. )
  7. insert into tb3 values (1,'张三',20);
  8. insert into tb3(tb3_id,tb3_age) values(2,24);
  9. select * from tb3;

--已经有了tb3_id为1的行记录,再次插入,违反唯一约束

  1. insert into tb3(tb3_id,tb3_name,tb3_age) values(1,'李四',25);

--给tb3表添加主键约束,主键名为:pk_id

  1. alter table tb3 add constraint pk_id primary key (tb3_id);

--给tb3_name添加唯一约束

  1. alter table tb3 add constraint un_name unique (tb3_name);

--已存在姓名为张三的记录,违反唯一约束

  1. insert into tb3 values (3,'张三',26);

--mysql 删除约束的语句,使用index,oracle SqlServer等使用constraint

  1. alter table tb3 drop index un_name;

--删除约束后,允许存在多个tb3_name为张三的记录

  1. insert into tb3 values (3,'张三',26);

SQL CREATE INDEX

  1. CREATE INDEX index_name
  2. ON table_name (column_name)

SQL DROP

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

SQL ALTER

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

SQL Auto Increment

Auto-increment 会在新记录插入表中时生成一个唯一的数字。

  1. ALTER TABLE table_name CHANGE column_name column_name data_type(size) constraint_name AUTO_INCREMENT;

SQL 视图

  1. CREATE VIEW view_name AS
  2. SELECT column_name(s)
  3. FROM table_name
  4. WHERE condition

SQL 日期

http://www.runoob.com/sql/sql-dates.html

SQL NULL 值

SQL NULL 函数

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

SQL 通用数据类型

http://www.runoob.com/sql/sql-datatypes-general.html

SQL DB 数据类型

http://www.runoob.com/sql/sql-datatypes.html

SQL 函数

SQL Aggregate 函数

SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
AVG() - 返回平均值
COUNT() - 返回行数
FIRST() - 返回第一个记录的值
LAST() - 返回最后一个记录的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和

SQL Scalar 函数

SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:
UCASE() - 将某个字段转换为大写
LCASE() - 将某个字段转换为小写
MID() - 从某个文本字段提取字符,MySql 中使用
SubString(字段,1,end) - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度
ROUND() - 对某个数值字段进行指定小数位数的四舍五入
NOW() - 返回当前的系统日期和时间
FORMAT() - 格式化某个字段的显示方式
提示:在下面的章节,我们会详细讲解 Aggregate 函数和 Scalar 函数。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注