`
qilixiang012
  • 浏览: 202779 次
文章分类
社区版块
存档分类
最新评论

SQL 语法

 
阅读更多

SQL(DML , DDL , DCL)



SQL 分为三个部分:数据操作语言data manipulation language (DML) , 数据定义语言 data definition

language(DDL),数据控制语言Data Control Language(DCL)


SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。查询和更新

指令构成了 SQL 的 DML 部分:
  • SELECT- 从数据库表中获取数据
  • UPDATE- 更新数据库表中的数据
  • DELETE- 从数据库表中删除数据
  • INSERT INTO- 向数据库表中插入数据


SQL (的数据定义语言)部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加

表间的约束。

SQL 中最重要的 DDL 语句:

  • CREATE DATABASE- 创建新数据库
  • ALTER DATABASE- 修改数据库
  • CREATE TABLE- 创建新表
  • ALTER TABLE- 变更(改变)数据库表
  • DROP TABLE- 删除表
  • CREATE INDEX- 创建索引(搜索键)
  • DROP INDEX- 删除索引


注意事项:

SQL 对大小写不敏感。

SQL 语句后面的分号:分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。如果您使用的是 MS Access 和 SQL Server 2000,则不必在每条 SQL 语句之后使用分号,不过某些数据库软件要求必须使用分号。



DDL:

1、说明:创建数据库
CREATE DATABASE database-name

2、说明:删除数据库
drop database dbname

3、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only

4、说明:删除新表
drop table tabname

5、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

6、说明:添加主键: Alter table tabname add primary key(col)
说明:
删除主键: Alter table tabname drop primary key(col)

7、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。

8、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname


DML(CRUD—Create,Retrieve,Update,Delete):

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where 范围


DCL:略


SQL Select:

SELECT [关键字] { * | 表名称.* | [表名称.]字段名称1 [AS 别名1] [, [表名称.] 字段名称2 [AS 别名2] [, ...]]}
FROM 表运算式 [, ...] [IN 外部表]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]


关键字:可以用来限制返回之记录的数量,可以设定为ALL、DISTINCT、DISTINCTROW 、或TOP。如果没有指定述语,缺省值为 ALL。


WHERE:寻找FROM中的表符合特定条件的资料记录。WHERE 可以使用下面的BETWEEN、LIKE、IN运算子:

Between...And:判断表达式的值是否落在指定的范围之中。

Like:寻找相符合的关键字。

IN运算式:限定范围。

NOT IN运算式:表示不属于所指定的范围。

ORDER BY子句:可以设定排序的字段。

GROUP BY子句:将查询的结果做统计。

HAVING子句:使用在SELECT 表达式中,筛选已经GROUP BY统计的记录。

Union:可以合并多组查询的结果。

JOIN:连接组合两个表中的字段记录。

子查询(sub query):表达式中,可以包括SELECT表达式。

Select...Into:将查询的结果,建立一个产生的表。

运算符如下:
操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

AND 和 OR 运算符:
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

SQL 通配符:

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

数据类型:
数据类型 描述
  • integer(size)
  • int(size)
  • smallint(size)
  • tinyint(size)
仅容纳整数。在括号内规定数字的最大位数。
  • decimal(size,d)
  • numeric(size,d)

容纳带有小数的数字。

"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。

char(size)

容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。

在括号中规定字符串的长度。

varchar(size)

容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。

在括号中规定字符串的最大长度。

date(yyyymmdd) 容纳日期。

SQL 约束:
  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT


SQL Date 数据类型:

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式 YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: 唯一的数字


例子代码:

使用 DISTINCT 关键词:
SELECT DISTINCT Company FROM Orders 

AND 和 OR 运算符:

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

ORDER BY 语句用于对结果集进行排序:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

PERCENT,TOP 子句用于规定要返回的记录的数目:
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式:
SELECT * FROM Persons
WHERE City LIKE '%lon%'
SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'

IN 操作符允许我们在 WHERE 子句中规定多个值:
SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter')

BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围:
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'

AS可以为列名称和表名称指定别名(Alias):

使用表名称别名:

SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'

使用一个列名别名:

SELECT LastName AS Family, FirstName AS Name
FROM Persons

Key(如下:Id_P)引用两个表:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

UNION 操作符用于合并两个或多个 SELECT 语句的结果集:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。

UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中:
SELECT LastName,Firstname
INTO Persons_backup
FROM Persons
WHERE City='Beijing'
下面的例子会创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
也可以对一个以上的列应用 GROUP BY 语句,就像这样:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate


HAVING 子句,在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数(SUM())一起使用:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000

内连接、外连接、交叉连接:

什么是连接查询呢?

概念:根据两个表或多个表的列之间的关系,从这些表中查询数据。
目的:实现多个表查询操作。

连接标准语法格式:

FROM join_table join_type join_table[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。join_type 指出连接类型。join_condition指连接条件。

连接类型:

连接分为三种:内连接、外连接、交叉连接。

内连接(INNER JOIN):

使用比较运算符(包括=、>、<、<>、>=、<=、!>和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据比较运算符不同,内连接分为等值连接、自然连接和不等连接三种。

1、等值连接

概念:在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。

select * from T_student s,T_class c where s.classId = c.classId   
     等于  
select * from T_student s inner join T_class c on s.classId = c.classId

2、不等连接

概念:在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)

select * from T_student s inner join T_class c on s.classId <> c.classId

3、自然连接

概念:连接条件和等值连接相同,但是会删除连接表中的重复列。

查询语句同等值连接基本相同:

select s.*,c.className from T_student s inner join T_class c on s.classId = c.classId
总结:内连接是只显示满足条件的!

外连接:

外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。

1、左连接:

概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

select * from  T_student s left join T_class c on s.classId = c.classId
总结:左连接显示左表全部行,和右表与左表相同行。

2、右连接:

概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

select * from  T_student s right join T_class c on s.classId = c.classId
总结:右连接恰与左连接相反,显示右表全部行,和左表与右表相同行。

3、全连接:

概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

select * from  T_student s full join T_class c on s.classId = c.classId
总结:返回左表和右表中的所有行。

交叉连接(CROSS JOIN):也称迪卡尔积 :

概念:不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积(例如:T_student和T_class,返回4*4=16条记录),如果带where,返回或显示的是匹配的行数

1、不带where:

select *from T_student cross join T_class  
  ‘等于  
select *from T_student, T_class
总结:相当与笛卡尔积,左表和右表组合。

2、有where子句,往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择 :

select * from T_student s cross join T_class c where s.classId = c.classId   
(注:cross join后加条件只能用where,不能用on)



SQL函数:

AVG 函数返回数值列的平均值。NULL 值不包括在计算中:
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Carter'
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name

FIRST() 函数返回指定的字段中第一个记录的值,提示:可使用 ORDER BY 语句对记录进行排序:
SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders

LAST() 函数返回指定的字段中最后一个记录的值:
SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders

MAX 函数返回一列中的最大值。NULL 值不包括在计算中:
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders

MIN 函数返回一列中的最小值。NULL 值不包括在计算中:
SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders

SUM 函数返回数值列的总数(总额):
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders

UCASE 函数把字段的值转换为大写:
SELECT UCASE(LastName) as LastName,FirstName FROM Persons

LCASE 函数把字段的值转换为小写:
SELECT LCASE(LastName) as LastName,FirstName FROM Persons

MID 函数用于从文本字段中提取字符:
SELECT MID(City,1,3) as SmallCity FROM Persons

LEN 函数返回文本字段中值的长度:
SELECT LEN(City) as LengthOfCity FROM Persons

ROUND 函数用于把数值字段舍入为指定的小数位数:
SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products

NOW 函数返回当前的日期和时间:
SELECT ProductName, UnitPrice, Now() as PerDate FROM Products

FORMAT 函数用于对字段的显示进行格式化:
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate
FROM Products

参考链接:http://www.w3school.com.cn/sql/index.asp

分享到:
评论

相关推荐

    SQL 语法 SQL 总结 SQL教程

    SQL 语法 SQL select SQL distinct SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between SQL Aliases SQL Join SQL ...

    sqlserver sql语法大全

    sql语法大全 基于sqlserver数据库

    常用SQL语法技巧常用SQL语法技巧常用SQL语法技巧

    常用SQL语法技巧常用SQL语法技巧常用SQL语法技巧常用SQL语法技巧常用SQL语法技巧

    SQL语法手册SQL语法手册

    SQL语法手册 Select 用途 从指定表中取出指定的列的数据 语法:SELECT column_name(s) FROM table_name 解释: 从数据库中选取资料列,并允许从一或多个资料表中,选取一或多个资料列或资料行。SELECT 陈述式的...

    SQL语法大全中文版SQL语法大全中文版

    SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版

    Hive_SQL语法大全

    Hive_Sql语法详述,平时工作中遇到的问题,用于Hadoop平台的数据挖掘。

    SqlParser C++实现的SQL语法解释器

    SqlParser C++实现的SQL语法解释器,忘了在哪找到的,方便大家学习,直接贴上来了

    SQL语法教学课件

    适合教学使用的SQL语法课件,内容相对精炼。

    ORACLE和SQL语法区别归纳

    ORACLE和SQL语法区别归纳 对于新手有帮助

    Oracle与SQLServer的SQL语法差异

    Oracle与SQLServer的SQL语法差异,用简单易懂的语言和实例对Oracle和Sql Server语法之间的差异进行了对比分析,更加适用于入门的人

    SQL语法教材.pdf

    SQL语法教材.pdf SQL 语法说明 一、 利用 SELECT 指令选取数据 1. SELECT 语法基本架构 2. 选取全部资料 3. 指定字段 4. 选取不重复的数据 5. 衍生字段 6. 数据排序 7. 资料分组 8. 加上选择条件 9. 使用万用字符 ...

    SQL语法参考手册,简单易用

    SQL语法参考手册,TXT文档 DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,...

    oracle sql 语法大全

    oracle sql 语法大全 oracle sql 语法大全

    sql语法大全中文版

    sql语法大全中文版sql语法大全中文版sql语法大全中文版sql语法大全中文版sql语法大全中文版sql语法大全中文版

    SQL语法手册.rar

    SQL语法手册.rar SQL语法手册.rar SQL语法手册.rar SQL语法手册.rar

    SQL精讲语法(SQL语法大全.doc数据库)

    SQL语法大全 1. ASP与Access数据库连接: 2. ASP与SQL数据库连接: 3.整合性的查询: 1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 表中的所有列,包括其中的重复...

    Sql语法帮助手册_Sql语法帮助文档.rar

    Sql语法帮助手册_Sql语法帮助文档.rar

    SQL语法大全全解析

    详细讲解SQL语法,值得收藏! 详细讲解SQL语法,值得收藏! 详细讲解SQL语法,值得收藏!

    SQL语法和测验SQL语法和测验

    SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验

Global site tag (gtag.js) - Google Analytics