SQL语句大全

合集下载

sql语句大全及用法 freebuf

sql语句大全及用法 freebuf

sql语句大全及用法 freebuf SQL(Structured Query Language)是一种用于管理关系型数据库的编程语言,它使用一系列指令来操作数据库。

下面是一些常用的SQL语句及其用法:1. SELECT:从数据库中检索数据。

用法:SELECT column1, column2, … FROM table_name;2. WHERE:过滤记录,执行条件查询。

用法:SELECT * FROM table_name WHERE column_name operator value;3. INSERT INTO:将新记录插入到表中。

用法:INSERT INTO table_name(column1, column2, …) VALUES(value1, value2, …);4. UPDATE:更新表中的记录。

用法:UPDATE table_name SET column_name = new_value WHERE column_name = value;5. DELETE:删除表中的记录。

用法:DELETE FROM table_name WHERE column_name = value;6. JOIN:在两个或多个表之间建立连接,并从中检索数据。

用法:SELECT * FROM table_name1 JOIN table_name2 ONtable_name1.column_name = table_name2.column_name;7. GROUP BY:根据一个或多个列对结果进行分组。

用法:SELECT column1, COUNT(column2) FROM table_name GROUP BY column1;8. ORDER BY:根据一个或多个列对结果进行排序。

用法:SELECT * FROM table_name ORDER BY column_nameASC/DESC;9. DISTINCT:返回不同的值,消除重复的行。

SQL命令大全

SQL命令大全

--语句功能…--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE VIEW --创建一个视图DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引CREATE PROCEDURE --创建一个存储过程DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建一个触发器DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除一个域--数据控制GRANT --授予用户访问权限DENY --拒绝用户访问REVOKE --解除用户访问权限--事务控制COMMIT --结束当前事务ROLLBACK --中止当前事务SET TRANSACTION --定义当前事务数据访问特征--程序化SQLDECLARE --为查询设定游标EXPLAN --为查询描述数据访问计划OPEN --检索查询结果打开一个游标FETCH --检索一行查询结果CLOSE --关闭游标PREPARE --为动态执行准备SQL 语句EXECUTE --动态地执行SQL 语句DESCRIBE --描述准备好的查询---局部变量declare @id char(10)--set @id = '10010001'select @id = '10010001'---全局变量---必须以@@开头--IF ELSEdeclare @x int @y int @z intselect @x = 1 @y = 2 @z=3if @x > @yprint 'x > y' --打印字符串'x > y'else if @y > @zprint 'y > z'else print 'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = '1' then e_wage*1.08 when job_level = '2' then e_wage*1.07 when job_level = '3' then e_wage*1.06 else e_wage*1.05end--WHILE CONTINUE BREAK declare @x int @y int @c intselect @x = 1 @y=1while @x < 3beginprint @x --打印变量x 的值while @y < 3beginselect @c = 100*@x + @yprint @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1end--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay '01:02:03'select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time '23:08:00'select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operatorvalueex:(宿主)select * from stock_information where stockid = str(nid) stockname = 'str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' --------- ([]指定值的范围)stockname like '[^F-M]%' --------- (^排除指定范围)--------- 只能在使用like关键字的where子句中使用通配符)or stockpath = 'stock_path'or stocknumber < 1000and stockindex = 24not stocksex = 'man'stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)--------- 子查询--------- 除非能确保内层select只返回一个行的值,--------- 否则应在外层where子句中用一个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_nameselect stockname , "stocknumber" = count(*) from table_name group by stockname--------- group by 将表按行分组,指定列中有相同的值having count(*) = 2 --------- having选定指定的组select *from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示table1.id =* table2.id -------- 右外部连接select stockname from table1union [all] ----- union合并查询结果集,all-保留重复行select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name ----------- 删除表中所有行,仍保持表的完整性drop table table_name --------------- 完全删除表***alter table*** --- 修改数据库表结构alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ---- 显示表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... ----- 实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束***function(/*常用函数*/)***----统计函数----A VG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--A VGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--V AR()--V AR()函数返回表达式中所有值的统计变异数--V ARP()--V ARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expression) --返回以弧度表示的角的正弦COS(float_expression) --返回以弧度表示的角的余弦TAN(float_expression) --返回以弧度表示的角的正切COT(float_expression) --返回以弧度表示的角的余切/***反三角函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的自然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平方根/***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π即3.1415926535897936RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运行结果如下----------- -----------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------- -----------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression> AS <data_ type>[ length ])CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression> [, style])select cast(100+99 as char) convert(varchar(12), getdate())----日期函数----DAY() --函数返回date_expression 中的日期值MONTH() --函数返回date_expression 中的月份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定日期在datepart 方面的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值。

SQL语句大全

SQL语句大全

8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2
update SC set score=(select avg(SC_2.score)
from SC SC_2
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');
10、查询没有学全所有课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);
FROM SC L ,SC AS R
WHERE L.C# = R.C# and
L.score = (SELECT MAX(IL.score)
FROM SC AS IL,Student AS IM
WHERE L.C# = IL.C# and IM.S#=IL.S#
from Student left Outer join SC on Student.S#=SC.S#

sql包含的语句

sql包含的语句

sql包含的语句SQL(Structured Query Language)是用于管理关系型数据库的标准化语言。

它可以用于查询、插入、更新和删除数据库中的数据。

下面将列举10个常见的SQL语句及其用途。

1. SELECT语句:SELECT语句用于从数据库中检索数据。

它可以检索特定的列或所有列,并可以进行条件筛选、排序和分组。

例如:SELECT * FROM employees;SELECT name, age FROM customers WHERE country='China';2. INSERT INTO语句:INSERT INTO语句用于向数据库中插入新的行。

可以指定要插入的表、要插入的列和要插入的值。

例如:INSERT INTO customers (name, age, country) VALUES ('Alice', 25, 'USA');3. UPDATE语句:UPDATE语句用于更新数据库中的现有行。

可以指定要更新的表、要更新的列和更新的值,还可以使用WHERE子句来指定更新的条件。

例如:UPDATE employees SET salary=5000 WHERE department='IT';4. DELETE FROM语句:DELETE FROM语句用于从数据库中删除行。

可以指定要删除的表和要删除的条件。

例如:DELETE FROM customers WHERE country='China';5. CREATE TABLE语句:CREATE TABLE语句用于创建新的数据库表。

可以指定表的名称、列的名称和数据类型以及其他约束。

例如:CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),age INT,department VARCHAR(50));6. ALTER TABLE语句:ALTER TABLE语句用于修改现有的数据库表。

SQL语句大全(百度查询)

SQL语句大全(百度查询)

创建数据库创建之前判断该数据库是否存在if exists (select * from sysdatabases where name='databaseName')drop database databaseNamegoCreate DATABASE database-name删除数据库drop database dbname备份sql server--- 创建备份数据的deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack','c:\mssql7backup\MyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)根据已有的表创建新表:A:gouse 原数据库名goselect * into 目的数据库名.dbo.目的表名from 原表名(使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 创建序列create sequence SIMON_SEQUENCEminvalue 1 -- 最小值maxvalue 999999999999999999999999999 -- 最大值start with 1 -- 开始值increment by 1 -- 每次加几cache 20;删除新表drop table tabname增加一个列Alter table tabname add colname coltype删除一个列Alter table tabname drop column colname添加主键Alter table tabname add primary key(col)说明:删除主键:Alter table tabname drop primary key(col)创建索引create [unique] index idxname on tabname(col…。

SQL命令大全

SQL命令大全

下列语句部分是Mssql语句,不可以在access中使用。

SQL分类:DDL类型包括数据库、表的创建,修改,删除,声明—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML类型包括数据表中记录的查询,删除,修改,插入—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL类型包括数据库用户赋权,废除用户访问权限,提交当前事务,中止当前事务—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,简要介绍基础语句:1、说明:创建数据库CREATE DATABASE db1(db1代表数据库表,可自命名)2、说明:删除数据库drop database db1(db1代表数据库表,可自命名)3、说明:备份sql server--- 创建备份数据的deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create table tb1(Id int not null primary key,name varchar,..)(tb1为数据表名,ID为字段,int为数据类型整型,not null为数据是否可为空,Primary Key为主键设置,其中not null,primary key为可选项,字段,数据类型自定义。

)根据已有的表创建新表:A:create table tab_new like tab_old (使用旧表创建新表)B:create table tab_new as select col1,col2… from tab_old definition only5、说明:删除新表:drop table tb16、说明:增加一个列:Alter table tabname add column col type注:列增加后将不能删除。

常用的SQL语句

常用的SQL语句

常用的SQL语句下面列举了一些我们在开发中常常会使用到的SQL语句,供大家参考学习。

1. 查询所有数据:SELECT * FROM table_name;2. 查询指定列数据:SELECT column1, column2 FROM table_name;3. 带条件查询:SELECT * FROM table_name WHERE condition;4. 带条件查询并排序:SELECT * FROM table_name WHERE condition ORDER BY column_name ASC/DESC;5. 带分组的查询:SELECT column1, COUNT(*) FROM table_name GROUP BY column1;6. 带分组和排序的查询:SELECT column1, COUNT(*) FROM table_name GROUP BY column1 ORDER BY COUNT(*) DESC;7. 带聚合函数的查询:SELECT AVG(column1), MAX(column2), MIN(column3) FROM table_name;8. 带子查询的查询:SELECT * FROM table_name WHERE column1 IN (SELECT column1 FROM other_table);9. 带连接条件的查询:SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column2;10. 带连接和排序条件的查询:SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column2 ORDER BY table1.column2 ASC;11. 带连接和分组条件的查询:SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column2 GROUP BY table1.column2;12. 带连接和聚合函数条件的查询:SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column2 GROUP BY table1.column2 HAVING AVG(table2.column3) > 0;13. 插入数据:INSERT INTO table_name (column1, column2) VALUES (value1, value2);14. 更新数据:UPDATE table_name SET column1 = value1 WHERE condition;15. 删除数据:DELETE FROM table_name WHERE condition;16. 清空表数据:TRUNCATE TABLE table_name;17. 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype, ...);18. 修改表结构:ALTER TABLE table_name ADD column_name datatype;19. 删除表:DROP TABLE table_name;20. 查看表结构:DESCRIBE table_name;21. 查看表数据量:SELECT COUNT(*) FROM table_name;22. 查看表索引:SHOW INDEX FROM table_name;23. 创建索引:CREATE INDEX index_name ON table_name (column_name);24. 删除索引:DROP INDEX index_name ON table_name;25. 批量插入数据:INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), ...;26. 批量更新数据:UPDATE table_name SET column1 = value1 WHERE condition, column2 = value2 WHERE condition, ...;27. 批量删除数据:DELETE FROM table_name WHERE condition, ...;28. 分页查询:SELECT * FROM table_name LIMIT offset, limit;29. 子查询嵌套查询:(SELECT column1 FROM other_table WHERE condition) IN (SELECT column1 FROM another_table WHERE condition);30. UNION操作符查询:SELECT * FROM table1 UNION SELECT * FROM table2。

sql简单语句

sql简单语句

sql简单语句
SQL(StructuredQueryLanguage)是一种用于数据库管理的编程语言,它可以用于创建、读取、更新和删除数据库中的数据。

以下是一些常用的 SQL 简单语句:
1. SELECT:用于从数据库中读取数据。

例如:SELECT * FROM 表名;
2. INSERT:用于向数据库中插入数据。

例如:INSERT INTO 表名(字段1, 字段2, ...) VALUES (值1, 值2, ...);
3. UPDATE:用于更新数据库中的数据。

例如:UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2 WHERE 条件;
4. DELETE:用于删除数据库中的数据。

例如:DELETE FROM 表名 WHERE 条件;
5. CREATE:用于创建数据库或表。

例如:CREATE DATABASE 数据库名;
CREATE TABLE 表名 (字段1 数据类型1, 字段2 数据类型
2, ...);
6. DROP:用于删除数据库或表。

例如:DROP DATABASE 数据库名;
DROP TABLE 表名;
以上是 SQL 简单语句中的一部分,它们是使用 SQL 进行数据库
管理时必须掌握的基础知识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL语句大全正如大多数现代的关系语言一样,SQL 是基于记录关系微积分(TRC)的。

结果是每个可以用记录关系微积分(TRC)表示的查询(相等地,或者是关系演算),同样也可以用SQL 表示。

不过,还有一些超出关系演算或者微积分的能力。

下面是一个SQL 提供的并非关系演算或者关系微积分的内容的一个列表:∙插入,删除或者更改数据的命令。

∙算术能力:在SQL 里,我们可以和比较功能一样进行算术运算,例如∙ A < B + 3。

要注意+ 或者其他算术操作符从未在关系演算或者关系微积分里面出现过。

∙分配和打印命令:我们可以打印一条查询构造的关系以及给一个被计算的关系分配关系名。

∙聚集函数:象average,sum,max,等操作符可以应用于一个关系的列以获取单一的量。

1.4.1. Select(选择)SQL 里面最常用的命令是SELECT 语句,用于检索数据。

语法是:SELECT [ ALL | DISTINCT [ ON ( expression[, ...] ) ] ]* | expression[ AS output_name] [, ...][ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table][ FROM from_item[, ...] ][ WHERE condition][ GROUP BY expression[, ...] ][ HAVING condition[, ...] ][ { UNION | INTERSECT | EXCEPT [ ALL ] } select][ ORDER BY expression[ ASC | DESC | USING operator] [, ...] ][ FOR UPDATE [ OF class_name[, ...] ] ][ LIMIT { count| ALL } [ { OFFSET | , } start]]现在我们将通过不同的例子演示SELECT 语句复杂的语法。

用于这些例子的表在供应商和部件数据库里定义。

1.4.1.1. 简单的Select这里是一些使用SELECT 语句的简单例子:Example 1-4. 带有条件的简单查询要从表PART 里面把字段PRICE 大于10 的所有记录找出来,我们写出下面查询:SELECT * FROM PARTWHERE PRICE > 10;然后得到表:PNO | PNAME | PRICE-----+---------+--------3 | Bolt | 154 | Cam | 25在SELECT语句里使用"*" 将检索出表中的所有属性。

如果我们只希望从表PART 中检索出属性PNA ME 和PRICE,我们使用下面的语句:SELECT PNAME, PRICEFROM PARTWHERE PRICE > 10;这回我们的结果是:PNAME | PRICE--------+--------Bolt | 15Cam | 25请注意SQL 的SELECT 语句对应关系演算里面的"projection" (映射),而不是"selection"(选择)(参阅关系演算获取详细信息)。

WHERE 子句里的条件也可以用关键字OR,AND,和NOT 逻辑地连接起来:SELECT PNAME, PRICEFROM PARTWHERE PNAME = 'Bolt' AND(PRICE = 0 OR PRICE <= 15);这样将生成下面的结果:PNAME | PRICE--------+--------Bolt | 15目标列表和WHERE 子句里可以使用算术操作。

例如,如果我们想知道如果我们买两个部件的话要多少钱,我们可以用下面的查询:SELECT PNAME, PRICE * 2 AS DOUBLEFROM PARTWHERE PRICE * 2 < 50;这样我们得到:PNAME | DOUBLE--------+---------Screw | 20Nut | 16Bolt | 30请注意在关键字AS 后面的DOUBLE 是第二个列的新名字。

这个技巧可以用于目标列表里的每个元素,给它们赋予一个在结果列中显示的新的标题。

这个新的标题通常称为别名。

这个别名不能在该查询的其他地方使用。

1.4.1.2. Joins(连接)下面的例子显示了SQL 里是如何实现连接的。

要在共同的属性上连接三个表SUPPLIER,PART 和SELLS,我们通常使用下面的语句:SELECT S.SNAME, P.PNAMEFROM SUPPLIER S, PART P, SELLS SEWHERE S.SNO = SE.SNO ANDP.PNO = SE.PNO;而我们得到的结果是:SNAME | PNAME-------+-------Smith | ScrewSmith | NutJones | CamAdams | ScrewAdams | BoltBlake | NutBlake | BoltBlake | Cam在FROM 子句里,我们为每个关系使用了一个别名,因为在这些关系间有着公共的命名属性(SNO 和PNO)。

现在我们可以区分不同表的公共命名属性,只需要简单的用每个关系的别名加上个点做前缀就行了。

联合是用与一个内部联接里显示的同样的方法计算的。

首先算出笛卡儿积SUPPLIER ×PART ×SELLS 。

然后选出那些满足WHERE 子句里给出的条件的记录(也就是说,公共命名属性的值必须相等)。

最后我们映射出除S.SNAME 和P.PNAME 外的所有属性。

另外一个进行连接的方法是使用下面这样的SQL JOIN 语法:select sname, pname from supplierJOIN sells USING (sno)JOIN part USING (pno);giving again:sname | pname-------+-------Smith | ScrewAdams | ScrewSmith | NutBlake | NutAdams | BoltBlake | BoltJones | CamBlake | Cam(8 rows)一个用JOIN 语法创建的连接表,是一个出现在FROM 子句里的,在任何WHERE,GROUP BY 或HAVING 子句之前的表引用列表项.其它表引用,包括表名字或者其它JOIN 子句,如果用逗号分隔的话,可以包含在FROM 子句里.连接生成的表逻辑上和任何其它在FROM 子句里列出的表都一样.SQL JOIN 有两种主要类型,CROSS JOIN (无条件连接) 和条件连接.条件连接还可以根据声明的连接条件(ON,USING,或NATURAL)和它应用的方式(INNER 或OUTER 连接)进一步细分.连接类型CROSS JOIN{ T1}CROSS JOIN { T2}一个交叉连接(cross join)接收两个分别有N 行和M 行的表T1 和T2,然后返回一个包含交叉乘积NxM 条记录的连接表.对于T1 的每行R1,T2 的每行R2 都与R1 连接生成连接的表行JR,JR 包含所有R1 和R2 的字段.CROSS JOIN 实际上就是一个INNER JOIN ON TRUE.条件JOIN{ T1} [ NATURAL ] [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] ]JOIN { T2} { ON search condition| USING ( join column list) }一个条件JOIN 必须通过提供一个(并且只能有一个) NATURAL,ON,或者USING 这样的关键字来声明它的连接条件.ON 子句接受一个search condition,它与一个WHERE 子句相同.USING 子句接受一个用逗号分隔的字段名列表,连接表中必须都有这些字段,并且用那些字段连接这些表,生成的连接表包含每个共有字段和两个表的所有其它字段.NATURAL 是USING 子句的缩写,它列出两个表中所有公共的字段名字.使用USING 和NATURAL 的副作用是每个连接的字段都只有一份拷贝出现在结果表中(与前面定义的关系演算的JOIN 相比较).[ INNER ]JOIN对于T1 的每行R1,连接成的表在T2 里都有一行满足与R1 一起的连接条件.对于所有JOIN 而言,INNER 和OUTER 都是可选的.INNER 是缺省.LEFT,RIGHT,和FULL 只用于OUTER JOIN.LEFT [ OUTER ]JOIN首先,执行一次INNER JOIN.然后,如果T1 里有一行对任何T2 的行都不满足连接条件,那么返回一个连接行,该行的T2 的字段为null.小技巧: 连接成的表无条件地包含T1 里的所有行.RIGHT [ OUTER ]JOIN首先,执行一次INNER JOIN.然后,如果T2 里有一行对任何T1 的行都不满足连接条件,那么返回一个连接行,该行的T1 的字段为null.小技巧: 连接成的表无条件地包含T2 里的所有行.FULL [ OUTER ]JOIN首先,执行一次INNER JOIN.然后,如果T1 里有一行对任何T2 的行都不满足连接条件,那么返回一个连接行,该行的T1 的字段为null.同样,如果T2 里有一行对任何T1 的行都不满足连接条件,那么返回一个连接行,该行的T2 的字段为null.小技巧: 连接成的表无条件地拥有来自T1 的每一行和来自T2 的每一行.所有类型的JOIN 都可以链接在一起或者嵌套在一起,这时T1和T2都可以是连接生成的表.我们可以使用圆括弧控制JOIN 的顺序,如果我们不主动控制,那么连接顺序是从左到右.1.4.1.3. 聚集操作符SQL 提供以一些聚集操作符(如,AVG,COUNT,SUM,MIN,MAX),这些聚集操作符以一个表达式为参数。

只要是满足WHERE 子句的行,就会计算这个表达式,然后聚集操作符对这个输入数值的集合进行计算.通常,一个聚集对整个SELECT 语句计算的结果是生成一个结果.但如果在一个查询里面声明了分组,那么数据库将对每个组进行一次独立的计算,并且聚集结果是按照各个组出现的(见下节).Example 1-5. 聚集果我们想知道表PART 里面所有部件的平均价格,我们可以使用下面查询:SELECT AVG(PRICE) AS AVG_PRICEFROM PART;结果是:AVG_PRICE-----------14.5如果我们想知道在表PART 里面存储了多少部件,我们可以使用语句:SELECT COUNT(PNO)FROM PART;得到:COUNT-------41.4.1.4. 分组聚集SQL 允许我们把一个表里面的记录分成组。

相关文档
最新文档