轻轻拍打的回忆。
[b]1.SELECT 语句用于从表中选取数据。[/b]
结果被存储在一个结果表中(称为[b]结果集, Result-Set[/b])。
由 SQL 查询程序获得的结果被存放在一个结果集中。大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。
[b]2. 选择top记录[/b]
[b]Sqlserver[/b]:
SELECT TOP number|percent column_name(s) FROM table_name
如:SELECT TOP 10 name FROM student;
SELECT TOP 10 percent * FROM student; // 前10%的记录
[b]Mysql[/b]:
SELECT column_name(s) FROM table_name LIMIT number
如:SELECT * FROM Persons LIMIT 5;
[b]Oracle[/b]:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
如:SELECT * FROM Persons WHERE ROWNUM <= 5
[b]3.连接有内连接(inner join),外连接(left join, right join, full join)和交叉连接(cross join)[/b]
(1)inner join可以简写为join,只列出符合条件的结果
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
[b]ON [/b]table_name1.column_name=table_name2.column_name
[b]等价于[/b]:
SELECT column_name(s)
FROM table_name1
JOIN table_name2
[b]Using[/b](column_name)
(2)外连接有三种,full join相当于是left join和right join的合集(union)
在外连接中把过滤条件放到on子句和where子句后的结果是不同的,内连接则一样。
[url]http://www.jb51.net/article/39435.htm[/url]
(3)交叉连接相当于是表的笛卡尔积
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。 因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。
SELECT * FROM table1 CROSS JOIN table2
[b] 等价于[/b]
SELECT * FROM table1,table2
[b]注意:cross join后加条件只能用where,不能用on[/b]
在连接中的on和where还可以参考:[url]http://www.cnblogs.com/hgwy/articles/1691689.html[/url]
[b]join表顺序[/b]:[url]http://tech.it168.com/a2012/0620/1362/000001362718.shtml[/url]
[b]4. 通配符[/b]
[img]http://dl2.iteye.com/upload/attachment/0105/5891/f9b68bbb-f911-3f0c-81e0-d877982bf302.png[/img]
[b]5. SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。[/b]
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
如:
下面的例子会制作 "Persons" 表的备份复件:
SELECT *
INTO Persons_backup
FROM Persons
IN 子句可用于向另一个数据库中拷贝表:
SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons
类似的拷贝还可以使用:create table back_table as select * from source_table;
[b]6. SQL 约束[/b]
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
我们将主要探讨以下几种约束:
• NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK
• DEFAULT
[b]7. SQL NULL 值[/b]
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
NULL 值的处理方式与其他值不同。
NULL 用作未知的或不适用的值的占位符。
注释:无法比较 NULL 和 0;它们是不等价的。
无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。
我们必须使用 IS NULL 和 IS NOT NULL 操作符。
[b]1.SELECT 语句用于从表中选取数据。[/b]
结果被存储在一个结果表中(称为[b]结果集, Result-Set[/b])。
由 SQL 查询程序获得的结果被存放在一个结果集中。大多数数据库软件系统都允许使用编程函数在结果集中进行导航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。
[b]2. 选择top记录[/b]
[b]Sqlserver[/b]:
SELECT TOP number|percent column_name(s) FROM table_name
如:SELECT TOP 10 name FROM student;
SELECT TOP 10 percent * FROM student; // 前10%的记录
[b]Mysql[/b]:
SELECT column_name(s) FROM table_name LIMIT number
如:SELECT * FROM Persons LIMIT 5;
[b]Oracle[/b]:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
如:SELECT * FROM Persons WHERE ROWNUM <= 5
[b]3.连接有内连接(inner join),外连接(left join, right join, full join)和交叉连接(cross join)[/b]
(1)inner join可以简写为join,只列出符合条件的结果
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
[b]ON [/b]table_name1.column_name=table_name2.column_name
[b]等价于[/b]:
SELECT column_name(s)
FROM table_name1
JOIN table_name2
[b]Using[/b](column_name)
(2)外连接有三种,full join相当于是left join和right join的合集(union)
在外连接中把过滤条件放到on子句和where子句后的结果是不同的,内连接则一样。
[url]http://www.jb51.net/article/39435.htm[/url]
(3)交叉连接相当于是表的笛卡尔积
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。 因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。
SELECT * FROM table1 CROSS JOIN table2
[b] 等价于[/b]
SELECT * FROM table1,table2
[b]注意:cross join后加条件只能用where,不能用on[/b]
在连接中的on和where还可以参考:[url]http://www.cnblogs.com/hgwy/articles/1691689.html[/url]
[b]join表顺序[/b]:[url]http://tech.it168.com/a2012/0620/1362/000001362718.shtml[/url]
[b]4. 通配符[/b]
[img]http://dl2.iteye.com/upload/attachment/0105/5891/f9b68bbb-f911-3f0c-81e0-d877982bf302.png[/img]
[b]5. SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。[/b]
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档
SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename
如:
下面的例子会制作 "Persons" 表的备份复件:
SELECT *
INTO Persons_backup
FROM Persons
IN 子句可用于向另一个数据库中拷贝表:
SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons
类似的拷贝还可以使用:create table back_table as select * from source_table;
[b]6. SQL 约束[/b]
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
我们将主要探讨以下几种约束:
• NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK
• DEFAULT
[b]7. SQL NULL 值[/b]
如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
NULL 值的处理方式与其他值不同。
NULL 用作未知的或不适用的值的占位符。
注释:无法比较 NULL 和 0;它们是不等价的。
无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。
我们必须使用 IS NULL 和 IS NOT NULL 操作符。