- 浏览: 202779 次
文章分类
最新评论
SQL 语法
SQL(DML , DDL , DCL)
- 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 语句之后使用分号,不过某些数据库软件要求必须使用分号。
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
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
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
6、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
删除索引:drop index idxname
8、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
FROM 表运算式 [, ...] [IN 外部表]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
SQL 通配符:
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
|
仅容纳整数。在括号内规定数字的最大位数。 |
|
容纳带有小数的数字。 "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。 |
char(size) |
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。 在括号中规定字符串的长度。 |
varchar(size) |
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。 在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
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
SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons
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
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 命令只会选取不同的值。
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
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)
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_nameCOUNT(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
相关推荐
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 ...
sql语法大全 基于sqlserver数据库
常用SQL语法技巧常用SQL语法技巧常用SQL语法技巧常用SQL语法技巧常用SQL语法技巧
SQL语法手册 Select 用途 从指定表中取出指定的列的数据 语法:SELECT column_name(s) FROM table_name 解释: 从数据库中选取资料列,并允许从一或多个资料表中,选取一或多个资料列或资料行。SELECT 陈述式的...
SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版SQL语法大全中文版
Hive_Sql语法详述,平时工作中遇到的问题,用于Hadoop平台的数据挖掘。
SqlParser C++实现的SQL语法解释器,忘了在哪找到的,方便大家学习,直接贴上来了
适合教学使用的SQL语法课件,内容相对精炼。
ORACLE和SQL语法区别归纳 对于新手有帮助
Oracle与SQLServer的SQL语法差异,用简单易懂的语言和实例对Oracle和Sql Server语法之间的差异进行了对比分析,更加适用于入门的人
SQL语法教材.pdf SQL 语法说明 一、 利用 SELECT 指令选取数据 1. SELECT 语法基本架构 2. 选取全部资料 3. 指定字段 4. 选取不重复的数据 5. 衍生字段 6. 数据排序 7. 资料分组 8. 加上选择条件 9. 使用万用字符 ...
SQL语法参考手册,TXT文档 DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,...
oracle sql 语法大全 oracle sql 语法大全
sql语法大全中文版sql语法大全中文版sql语法大全中文版sql语法大全中文版sql语法大全中文版sql语法大全中文版
SQL语法手册.rar SQL语法手册.rar SQL语法手册.rar SQL语法手册.rar
SQL语法大全 1. ASP与Access数据库连接: 2. ASP与SQL数据库连接: 3.整合性的查询: 1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 表中的所有列,包括其中的重复...
Sql语法帮助手册_Sql语法帮助文档.rar
详细讲解SQL语法,值得收藏! 详细讲解SQL语法,值得收藏! 详细讲解SQL语法,值得收藏!
SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验SQL语法测验