SQL语句大全
- 格式:doc
- 大小:111.00 KB
- 文档页数:22
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:返回不同的值,消除重复的行。
--语句功能…--数据操作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(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语句用于修改现有的数据库表。
创建数据库创建之前判断该数据库是否存在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…。
下列语句部分是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语句,供大家参考学习。
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(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 进行数据库
管理时必须掌握的基础知识。
简单基本的sql语句(1) 数据记录筛选:sql="select * from 数据表 where 字段名=字段值 order by 字段名[desc]"sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"sql="select top 10 * from 数据表 where 字段名=字段值 order by 字段名 [desc]"sql="select top 10 * from 数据表 order by 字段名 [desc]"sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"sql="select * from 数据表 where 字段名 between 值1 and 值2"(2) 更新数据记录:sql="update 数据表 set 字段名=字段值 where 条件表达式"sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"(3) 删除数据记录:sql="delete from 数据表 where 条件表达式"sql="delete from 数据表" (将数据表所有记录删除)(4) 添加数据记录:sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)(5) 数据记录统计函数:AVG(字段名) 得出一个表格栏平均值COUNT(*;字段名) 对数据行数的统计或对某一栏有值的数据行数统计MAX(字段名) 取得一个表格栏最大的值MIN(字段名) 取得一个表格栏最小的值SUM(字段名) 把数据栏的值相加引用以上函数的方法:sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"set rs=conn.excute(sql)用 rs("别名") 获取统计的值,其它函数运用同上。
sql语句大全(详细)sql语句大全(详细)数据库操作1.查看所有数据库show databases;2.查看当前使用的数据库select database();3.创建数据库create databases 数据库名 charset=utf8;4.删除数据库drop database 数据库名5.使用数据句库use database 数据库名6.查看数据库中所有表show tables;表的操作1.查看表结构desc 表名2.创建表结构的语法create table table_name(字段名数据类型可选的约束条件);demo:创建班级和学生表create table classes(id int unsigned auto_increment primary key not null, name varchar(10));create table students(id int unsigned primary key auto_increment not null, name varchar(20) default '',age tinyint unsigned default 0,height decimal(5,2),gender enum('男','女','人妖','保密'),cls_id int unsigned default 0)3.修改表–添加字段alter table 表名 add 列名类型demo:alter table students add birthday datetime;4.修改表–修改字段–重命名版alert table 表名 change 原名新名类型及约束demo:alter table syudents change birthday birth datetime not null;5.修改表–修改字段–不重命名alter table 表名 modify 列名类型及约束demo : alter table students modify birth date nout noll;6.删除表–删除字段alter table 表名 drop 列名demo :later table students drop birthday;7.删除表drop table 表名demo:drop table students;8.查看表的创建语句–详细过程show create table 表名demo : show create tabele students;查询基本使用1.查询所有列select * from 表名例:select * from classes;2.查询指定列select 列1,列2,...from 表名;例:select id,name from classes;增加说明:主键列是自动增长,但是在全列插入时需要占位,通常使用空值(0或者null) ; 字段默认值 default 来占位,插入成功后以实际数据为准1.全列插入:值的顺序与表结构字段的顺序完全一一对应此时字段名列表不用填写insert into 表名 values (...)例:insert into students values(0,’郭靖',1,'蒙古','2016-1-2');2.部分列插入:值的顺序与给出的列顺序对应此时需要根据实际的数据的特点填写对应字段列表insert into 表名 (列1,...) values(值1,...)例:insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2');上面的语句一次可以向表中插入一行数据,还可以一次性插入多行数据,这样可以减少与数据库的通信3.全列多行插入insert into 表名 values(...),(...)...;例:insert into classes values(0,'python1'),(0,'python2');4.部分列多行插入insert into 表名(列1,...) values(值1,...),(值1,...)...;例:insert into students(name) values('杨康'),('杨过'),('小龙女');修改update 表名 set 列1=值1,列2=值2... where 条件例:update students set gender=0,hometown='北京' where id=5;删除delete from 表名 where 条件例:delete from students where id=5;逻辑删除,本质就是修改操作update students set isdelete=1 where id=1;as关键字1.使用 as 给字段起别名select id as 序号, name as 名字, gender as 性别 from students;2.可以通过 as 给表起别名select s.id,,s.gender from students as s;条件语句查询where后面支持多种运算符,进行条件的处理比较运算符逻辑运算符模糊查询范围查询空判断比较运算符等于: =大于: >大于等于: >=小于等于: <=不等于: != 或 <>例1:查询编号大于3的学生select * from students where id > 3;例2:查询编号不大于4的学生select * from students where id <= 4;例3:查询姓名不是“黄蓉”的学生select * from students where name != '黄蓉';例4:查询没被删除的学生select * from students where is_delete=0;逻辑运算符andornot例5:查询编号大于3的女同学select * from students where id > 3 and gender=0;例6:查询编号小于4或没被删除的学生select * from students where id < 4 or is_delete=0;模糊查询like%表示任意多个任意字符_表示一个任意字符例7:查询姓黄的学生select * from students where name like '黄%';例8:查询姓黄并且“名”是一个字的学生select * from students where name like '黄_';例9:查询姓黄或叫靖的学生select * from students where name like '黄%' or name like '%靖';范围查询分为连续范围查询和非连续范围查询in表示在一个非连续的范围内例10:查询编号是1或3或8的学生select * from students where id in(1,3,8);between … and …表示在一个连续的范围内例11:查询编号为3至8的学生select * from students where id between 3 and 8;例12:查询编号是3至8的男生select * from students where (id between 3 and 8) and gender=1;空判断判断为空例13:查询没有填写身高的学生select * from students where height is null;注意: 1. null与’'是不同的 2. is null判非空is not null例14:查询填写了身高的学生select * from students where height is not null;例15:查询填写了身高的男生select * from students where height is not null and gender=1;优先级优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符and比or先运算,如果同时出现并希望先算or,需要结合()使用排序排序查询语法:select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]语法说明:将行数据按照列1进行排序,如果某些行列1 的值相同时,则按照列2 排序,以此类推asc从小到大排列,即升序desc从大到小排序,即降序默认按照列值从小到大排列(即asc关键字)例1:查询未删除男生信息,按学号降序select * from students where gender=1 and is_delete=0 order by id desc;例2:查询未删除学生信息,按名称升序select * from students where is_delete=0 order by name;例3:显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时按照身高从高–>矮排序select * from students order by age desc,height desc;分页select * from 表名 limit start=0,count说明从start开始,获取count条数据start默认值为0也就是当用户需要获取数据的前n条的时候可以直接写上xxx limit n;例1:查询前3行男生信息select * from students where gender=1 limit 0,3;关于分页的一个有趣的推导公式已知:每页显示m条数据,当前显示第n页求总页数:此段逻辑后面会在python项目中实现查询总条数p1使用p1除以m得到p2如果整除则p2为总数页如果不整除则p2+1为总页数获取第n页的数据的SQL语句求解思路第n页前有n-1页所在第n页前已经显示的数据的总量是(n-1)*m由于数据的下标从0开始所以第n页前所有的网页的下标是0,1,…,(n-1)*m-1所以第n页的数据起始下标是(n-1)*m获取第n页数据的SQL语句select * from students where is_delete=0 limit (n-1)*m,m注意:在sql语句中limit后不可以直接加公式聚合函数总数count(*) 表示计算总行数,括号中写星与列名,结果是相同的例1:查询学生总数select count(*) from students;最大值max(列) 表示求此列的最大值例2:查询女生的编号最大值select max(id) from students where gender=2;最小值min(列) 表示求此列的最小值例3:查询未删除的学生最小编号select min(id) from students where is_delete=0;求和sum(列) 表示求此列的和例4:查询男生的总年龄select sum(age) from students where gender=1;–平均年龄select sum(age)/count(*) from students where gender=1;平均值avg(列) 表示求此列的平均值例5:查询未删除女生的编号平均值select avg(id) from students where is_delete=0 andgender=2;分组group bygroup by + group_concat()group_concat(字段名)根据分组结果,使用group_concat()来放置每一个分组中某字段的集合group by + 聚合函数通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个值的集合做一些操作group by + havinghaving 条件表达式:用来过滤分组结果having作用和where类似,但having只能用于group by 而where是用来过滤表数据group by + with rollupwith rollup的作用是:在最后新增一行,来记录当前表中该字段对应的操作结果,一般是汇总结果。
常用sql查询语句大全常用SQL查询语句大全SQL (Structured Query Language) 是一种用于管理关系型数据库的编程语言,它可以用来从数据库中检索、插入、更新和删除数据。
以下是一些常用的SQL查询语句:1. SELECT语句:用于检索数据库中的数据。
- SELECT * FROM table_name; -- 检索表中的所有列和行- SELECT column1, column2 FROM table_name; -- 检索表中指定的列- SELECT column1, column2 FROM table_name WHERE condition; -- 检索满足条件的行2. INSERT语句:用于向数据库中插入新的数据。
- INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 插入指定的列和值- INSERT INTO table_name VALUES (value1, value2); -- 插入所有列和值3. UPDATE语句:用于更新数据库中的数据。
- UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition; -- 更新满足条件的行的值4. DELETE语句:用于从数据库中删除数据。
- DELETE FROM table_name WHERE condition; -- 删除满足条件的行5. WHERE子句:用于指定条件。
- SELECT * FROM table_name WHERE column_name = value; -- 检索满足条件的行- SELECT * FROM table_name WHERE column_name LIKE 'value%'; -- 使用通配符进行模糊匹配- SELECT * FROM table_name WHERE column_name IN (value1, value2); -- 检索列值在指定列表中的行6. ORDER BY子句:用于对结果进行排序。
sql查询语句大全及实例1.提取查询(SELECT)SELECT 语句用于从数据库表中提取数据:实例:从"Persons"表中提取数据:SELECT * FROM Persons3.排序(ORDER BY)ORDER BY 语句用于在查询结果中对取出的数据排序:实例:依据金额(Amount)和日期(OrderDate)字段,对"Orders"表中的记录进行从高到低(desc)排序:SELECT * FROM Orders ORDER BY Amount DESC, OrderDate4.过滤(WHERE)WHERE 子句通常用于在 SELECT、UPDATE 和 DELETE 语句中来过滤选择的数据:5.上下文过滤(HAVING)HAVING 子句仅对聚合函数(AVG,COUNT,SUM 等)出现的结果进行过滤:实例:从"Orders"表中选择超过 5000 的订单:SELECT * FROM OrdersHAVING SUM(Amount) > 50006.插入(INSERT)INSERT 语句用于向数据库插入新记录:实例:向"Persons"表中插入一条新记录:INSERT INTO Persons (firstname, lastname, age, address, city)VALUES ('Glenn', 'Quagmire', 33, 'Coolsville', 'Anchorage');7.更新(UPDATE)UPDATE 语句用于更新数据库中的记录:9.创建数据库(CREATE DATABASE)CREATE DATABASE 语句用于创建新的数据库:实例:创建新的数据库“MyDataBase”:CREATE DATABASE MyDataBase实例:在“MyDataBase”中创建一个新表“Persons”:CREATE TABLE Persons(PersonID int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))。
从命令行连接到SQLPLUS:Sqlplus sys/密码as sysdbaAlter user scott account unlock;用户已更改。
conn scott/tiger已连接。
SQL单条语句:SQL>desc emp(表名); 描述这张表EMPNO:雇员编号COMM:津贴DNAME:部门名称LOC:部门所在地desc salgrade:描述薪水等级select语句:select * from emp:把这个表中的内容全部取出来select ename, sal * 12,from emp;取出雇员的年薪select 2 * 3 from emp;Desc dual;(dual 代表输出一个字段)select * from dual;select 2 * 3 from dual;只出一个结果select sysdate from dual;取出系统时间select ename, sal * 12 anunal_sal(或者”anunal sal”,加引号是保持原来的格式输出,它代表年薪名) from emp;select ename, comm from emp;输出每个人的津贴select ename, sal * 12 + comm from emp;年薪+津贴select ename || salfrom emp;|| 代表字符连接符select ename || ‘abc’ from emp;’’是把字符串内容加上select ename || ‘ abc‘‘def’ from emp;中间会打印出一个单引号Where是过滤语句:select * from emp where deptno = 10;取出部门编号为10的成员select * from emp where ename = ‘Clark’;=是等值判断select ename, sal from emp where sal > 1500;取出薪水大于1500的成员select ename, sal, deptno from where deptno < >10;取出部门编号不等于10 的部门成员和薪水select ename, sal from emp where ename > ‘cba’;字符串比较select ename,sal from emp where sal between 800 and 1500(where sal >= 800 and sl <= 1500);取出薪水在800到1500之间的成员select ename, sal, comm from emp where comm is null;取出津贴为空的成员select ename, sal, comm from emp where comm is not null;取出津贴不为空的成员select ename, sal, comm from emp where sal in <800, 1500, 2000>;取出薪水等于800,1500,2000的成员select ename, sal, comm from emp where ename in <’sMITH’, ‘KING’, ‘ABC’>;取出这三个人select ename, sa, hiredate from emp where hiredate > ‘20-2月-81’(‘20-2-1981’);取出入职时间为1981年2月20号的成员select ename, sal from emp where deptno = 10 and sal > 1000;select ename, sal from emp where deptno =10 or sal > 1000;注意两者结果不一样select ename from emp where ename like ‘%ALL%’;取出其中带有ALL字符串的成员名select ename from emp where ename like ‘_A%’;取出第二个字符是A的成员select ename from emp where ename like ‘%\%%’(‘%$%%’)(where ename like ‘%$%%’ escape ‘$’);告诉它这是转义字符数据排序:desc是降序、asc是升序(不写的话默认是升序)select * from dept order by deptno desc;按照deptno降序排列select empno, ename from emp order by empno asc;按照empno;升序排列//select empno , ename from emp where deptno < > 10 order by sal asc;select ename, sal * 12 annual_sal from emp where ename not like ‘_A%’ and sal > 800 order by sal desc;取出名字中第二个字母不是A且薪水大于800 的成员按降序排列sQL中的函数:select lower <ename> from emp;取出的名字都是小写select ename from emp where lower <ename> like ‘_a%’;先小写名字再取出第二个字母是a的成员select ename from emp where like ‘_a%’ or ename like ‘_A%’;select substr <ename, 2,3> from emp;从第二个开始截取三个名字select chr <65> from dual;把AsCII码转为字符select ascii <’A’> from dual;把A转为AsCII码select round <23.652> from dual;四舍五入输出为24(默认四舍五入到个位)select round <23.652, 2> from dual;保留两位小数,输出23.65select round <23.652, -1> from dual;四舍五入到十位,输出为20select to_char <sal, ‘$99,999.9999’> from emp;把sal转为固定格式,小数点后四位,小数点前五位(小数点后的必写,小数点前的位数不够可以省略)select to_char <sal, ‘L99,999.9999’> from emp;L为转为本地货币符select to_char <sal, ‘L00,000.0000’> from emp;注意:即使小数点前位数不够,也得把0补上select to_char <hiredate, ‘YYYY-MM-DD HH:MI:ss’> from emp;把入职时间改为固定格式select to_char <hiredate, ‘YYYY-MM-DD HH24:MI:ss’> from emp;HH为12进制,HH24为24进制select to_char <sysdate, ‘YYYY-MM-DD HH24:MI:ss’> from dual;select ename, hiredate from emp where hiredate > to_char <’1981-2-20 12:34:56’, ‘YYYY-MM-DD HH24:MI:ss’>;select sal from emp where sal > to_number <’$1,250.00’,’$9,999.00’>;取出薪水大于1250的select ename ,sal * 12 + nvl <comm,0> from emp;如果comm不存在则以0计算,nvl 就是为了避免空值select count <ename> from emp;select count <distinct deptno> from emp;Group by 分组语句:select avg <sal> from emp group by deptno;select deptno, avg <sal> from emp group by deptno;上述两项都是求部门的平均薪水select deptno,job max <sal> from emp group by deptno, job;select ename from emp where sal = < select max <sal>from emp>;取出薪水最高的那个人名select avg <sal>, deptno from emp group by deptno having avg<sal> > 2000;取出平均薪水大于2000的那些组(不能用where,因为它只控制单行输出,having是对分组进行限制)总结语句:select avg<sal> from emp where sal > 1200 group by deptno having avg<sal> > 1500 order by avg<sal> desc;子查询:Select ename, sal from emp where sal = <select max<sal> from emp>; select嵌套Select ename,sal from emp where sal > <select avg<sal> from emp>;//Select ename, sal, deptno from emp where sal in <select max<sal> from emp grup by emptno>;注意这句话有问题表连接:Select ename,sal from empjoin <select max <sal>, deptno from emp group by deptno> tOn <emp.sal = t.max_sal and emp.deptno = t.deptno>;Jion是连接的意思on里面是连接条件自连接:Select e1.ename, e2.ename from emp e1,emp e2 where e1.mgr = e2.empno;老版写法Select e1.ename,e2.ename from emp e1 join emp e2 on <e1.mgr = e2.empno>;新版写法Select e1.ename,e2.ename from emp e1 left join emp e2 on <e1.mgr =e2.empno>;左外连接:注意left的区别,把左边多余的拿出来等值连接:Select ename,dname from emp, dept where emp.deptno = dept.deptno;老版写法Select ensme,dname from emp join dept on <emp.deptno = dept.deptno>;新版写法Select ensme,dname from emp join dept using <deptno>; 和上面的写法一样,但不推荐使用using的用法非等值连接:Select ename, grade from emp e (e代表的是表的别名) join salgrade s on <e.sal between s.losal between and s.hisal>;三个表的连接写法:Select ename, dname, grade from emp e join dept d on <e.deptno = d.deptno> join salgrade s on <e.sal between s.losal and s.hisal> where ename not like ‘_A%’;求部门中哪些人的薪水最高:Select ename ,sal from emp join <select max<sal> max_sal, deptno from emp group by deptno> t on <emp.sal = t.max_sal and emp.deptno = t.deptno>;求部门平均薪水的等级:Select deptno, avg<sal>, grade from <select deptno, avg<sal> avg_sal from empgroup by deptno> t join salgrade s on <t.avg_sal between s.losal and s.hisal>;求出所有部门的每个人的薪水等级:Select deptno, ename,grade from emp join salgrade s on <emp.sal between s.losal and s.hisal>;求部门平均薪水的等级:Select deptno, avg<grade> from <Select deptno, ename,grade from emp join salgrade s on <emp.sal between s.losal and s.hisal>> t group by deptno;雇员中哪些人是经理人:Select ename from emp where empno in <select mgr from emp>;Select ename from emp where empno in <select distinct mgr from emp>;有效率的写法不准用组函数,求薪水的最高值(面试题):提示:用自连接select distinct sal from emp where sal not in <select distinct (distinct 是去掉重复的项) e1.sal from emp e1.job emp e2 on < e1.sal < e2.sal > >;求平均薪水最高的部门编号:Select deptno, avg_sal from<select avg<sal> avg_sal, deptno from emp group by deptno>where avg_sal =<select max<avg_sal> from<select avg<sal> avg_sal,deptno from emp group by deptno> >;另一种写法:Select deptno, avg_sal from<select avg<sal> avg_sal, deptno from emp group by deptno>where avg_sal =<select max<avg<sal>> from emp group by deptno >;求平均薪水最高的部门称号:Select dname from dept where deptno =<select deptno from<select avg<sal> avg_sal, deptno from emp group by deptno> where avg_sal =<select max<avg_sal> from<select avg<sal> avg_sal,deptno from emp group by deptno> >>;求平均薪水的等级最低的部门名称:Select dname, t1.deptno, grade, avg_sal from(Select deptno, grade, avg_sal from(Select deptno, avg<sal> avg_sal from emp group by deptno) tJoin salgrade s on (t.avg_sal between s.losal and s.hisal)) t1Join dept on (t1.deptno = dept.deptno)Where t1.grade =(Select min(grade) from(Select deptno, grade, avg_sal from(select deptno, avg(sal) avg_sal from emp group by deptno) t Join salgrade s on (t.avg_sal between s.losal and s.hisal)))求比普通员工最高薪水还要高的经理名称:select ename from empWhere empno in <select distinct mgr from emp where mgr is not null> and sal > select max<sal> from empwhere empno not in<select distinct mgr from emp where mgr is not null>求部门经理人中平均薪水最低的部门名称?求薪水最高的前5名雇员?//Select ename,sal from (select ename,sal from emp where empno in (select sal, //deptno from emp order by sal desc)) where rownum <= 5;求薪水最高的第六到第十名雇员?求最后入职的5名雇员?1、查找选了‘黎明’老师课的的姓名2、查有2门课以上不及格的学生姓名和平均成绩select sname,avgsalfrom (select sno,avg(scgrade) avgsalfrom (select s.sno,sname,cno,scgradefrom sc,swhere scgrade<60 and s.sno=sc.sno)group by snohaving count(*)>=2)table1, swhere s.sno=table1.sno3、查选了1和选了2的学生的姓名1、select snamefrom swhere sno not in(select snofrom c,scwhere o=oand c.cteacher='黎明')2、select sname,avgsalfrom (select sno,avg(scgrade) avgsalfrom (select s.sno,sname,cno,scgradefrom sc,swhere scgrade<60 and s.sno=sc.sno )group by snohaving count(*)>=2)table1, swhere s.sno=table1.sno3、select snamefrom s,scwhere s.sno=sc.snoand cno='1'intersectselect snamefrom s,scwhere s.sno=sc.snoand cno='2'1).求部门中哪些人的薪水最高select ename,emp.deptno,salfrom(select max(sal) maxsalary,deptnofrom empgroup by deptno)table1,empwhere emp.sal=table1.maxsalary2).求部门平均薪水的等级select deptno,gradefrom(select avg(sal) avgsal,deptnofrom empgroup by deptno)table1,salgradewhere avgsal between losal and hisal3).雇员中有哪些人是经理人select *from empwhere job='MANAGER'4).不准用组函数,求薪水的最高值(面试题)select salfrom empwhere sal>=all(select salfrom emp)5).求平均薪水最高的部门的部门的编号select deptno, avg(sal) maxsalfrom empgroup by deptnohaving avg(sal)>=all(select avg(sal) from emp group by deptno)6).求平均薪水最高的部门的部门名称select dnamefrom(select deptno, avg(sal) maxsalfrom empgroup by deptnohaving avg(sal)>=all(select avg(sal) from emp group by deptno))table1,deptwhere table1.deptno=dept.deptno7).求平均薪水等级最低的部门名称select dnamefrom deptwhere deptno=(select deptnofrom(select deptno,gradefrom(select avg(sal) avgsal,deptnofrom empgroup by deptno)table1,salgradewhere avgsal between losal and hisal)where grade<=all(select gradefrom(select deptno,gradefrom(select avg(sal) avgsal,deptnofrom empgroup by deptno)table1,salgradewhere avgsal between losal and hisal)) )8).求比普通员工的最高薪水还要高的经理人的名称select enamefrom empwhere job='MANAGER' and sal>=(select max(sal)from emp where job='CLERK')9).求薪水最高的前5名雇员select *from(select emp.*from emporder by sal desc)where rownum<=510.求薪水最高的第6到10名雇员(重点掌握)select *from(select table1.*,rownum rnfrom(select emp.*from emporder by sal desc)table1)where rn<=10 and rn>5比较效率:1、select * from emp where deptno = 10 and ename like ‘%A%’;(理论上效率高,如同短路语句)2、Select * from emp where ename like ‘%A%’ and deptno = 10;Create table stu(Id number(6),Name varchar2(20) constraint stu_name_nn not null,Sex number(1),Age number(3),Sdate date,Grade number(2) default 1,Class number(4),Email varchar2(50),Constraint stu_class_fk foreign key(class) references class(id),//定义外键Constraint stu_id_pk primary key(id),//定义主键Constraint stu_name_email_uni unique(email,name) //email和name必须相同)/Create table class(Id number(4) primary key,Name varchar2(20)not null)Alter table stu add(addr varchar2(100));(在表中加入一个字段)alter table stu modify(addr varchar2(50));(修改)Alter table stu drop(addr);(删除表中的字段)Insert into stu(id,name,email) values (1,’’a,’a’);Alter table stu add constraint stu_class_fk foreign key (class) references class(id);(加约束条件)Alter table stu drop constraint stu_class_fk;(删除约束条件)Select table_name from user_tables;Select conatraint_name from user_constraints;Select view_name from user_views;Select constraint_name,table_name from user_constraints;DML(数据操纵语言)语句:select、insert、delete、update(修改)Distinct:消除重复行Insert into dept values (50,’game’,’bj’);(已插入一行)Rollback;(回退已完成:回到没导入之前的状态)Create table emp2 as select * from emp;(备份一个表,内容和emp一模一样)Insert into dept2 values (50,’game’,’bj’);Insert into dept2(deptno,dname) values (60,’game2’);(增加指定的值)Insert into dept2 select * from dept;(把dept的值全部插入dept2中)Update emp2 set sal = sal*2,ename = ename || ‘-’ where deptno = 10;Select ename,sal from emp2 where deptno = 10;Update emp2 set sal = sal*2;Commit;(提交完成)此时,rollback已不起作用了,不会回到原始状态Delete from emp2;(所有都删掉)Delete from dept2 where deptno = 10;Rollback;DDL语句(数据定义语言):Create table t (a varchar2(10)); (创建表)Drop table t;(删除表)Alter user scott account unlock;(修改)DCL(数据控制语言)语句:Grant授权语句: grant [权限] on [要授予权限的数据库对象] to [使用者账户名称] with [授权选项]Revoke: deny [权限] on [要授予权限的数据库对象] to [使用者账户名称]常用的权限分配:grant授权:于为用户分配权限或角色GRANT CONNECT TO MARTIN;CONNECT角色允许用户连接至数据库,并创建数据库对象GRANT RESOURCE TO MARTIN;RESOURCE角色允许用户使用数据库中的存储空间GRANT CREATE SEQUENCE TO MARTIN;此系统权限允许用户在当前模式中创建序列,此权限包含在CONNECT角色中授予用户MARTIN 操作TEST表对象的权限允许用户查询TEST 表的记录:GRANT SELECT ON TEST TO MARTIN;允许用户更新TEST 表中的记录:GRANT UPDATE ON TEST TO MARTIN;允许用户插入、删除、更新和查询TEST 表中的记录:GRANT ALL ON TEST TO MARTIN;用新建用户来进行链接,发现权限不足。
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 operator valueex:(宿主)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查询语句的示例:1. **选择所有列**```sqlSELECT * FROM 表名;```2. **选择特定列**```sqlSELECT 列名1, 列名2 FROM 表名;```3. **添加条件**```sqlSELECT * FROM 表名WHERE 条件;```4. **排序结果**```sqlSELECT * FROM 表名ORDER BY 列名ASC/DESC;```5. **插入数据**```sqlINSERT INTO 表名(列名1, 列名2, ...) VALUES (值1, 值2, ...);```6. **更新数据**```sqlUPDATE 表名SET 列名1 = 值1, 列名2 = 值2, ... WHERE 条件; ```7. **删除数据**```sqlDELETE FROM 表名WHERE 条件;```8. **连接表**```sqlSELECT * FROM 表名1 JOIN 表名2 ON 表名1.列名= 表名2.列名; ```9. **聚合函数**```sqlSELECT COUNT(列名) FROM 表名WHERE 条件; --计数SELECT SUM(列名) FROM 表名WHERE 条件; --求和SELECT AVG(列名) FROM 表名WHERE 条件; --平均值SELECT MAX(列名) FROM 表名WHERE 条件; --最大值SELECT MIN(列名) FROM 表名WHERE 条件; --最小值```10. **分组和筛选**```sqlSELECT 列名, COUNT(*) FROM 表名GROUP BY 列名HAVING COUNT(*) > 值; --分组和筛选聚合数据```11. **子查询**```sqlSELECT * FROM 表名WHERE 列名IN (SELECT 列名FROM 表名WHERE 条件); -- IN 子查询SELECT * FROM 表名WHERE 列名= (SELECT 列名FROM 表名WHERE 条件); -- = 子查询(通常用于单行子查询)```12. **插入多行数据** (在某些数据库中可能不支持)```sqlINSERT INTO 表名(列名1, 列名2, ...) VALUES (值1a, 值2a, ...), (值1b, 值2b, ...), ...;```请注意,上述SQL语句仅为基本示例,实际使用时可能需要根据具体的数据库系统和需求进行调整。
SQL查询语句大全1. SELECT语句1.1 查询单表数据SELECT column1, column2, ... FROM table_name;1.2 查询多表数据SELECT column1, column2, ... FROM table1JOIN table2 ON condition;1.3 使用WHERE子句过滤数据SELECT column1, column2, ... FROM table_nameWHERE condition;1.4 使用ORDER BY子句排序结果SELECT column1, column2, ... FROM table_nameORDER BY column_name [ASC|DESC];1.5 使用LIMIT子句限制结果条数SELECT column1, column2, ...FROM table_nameLIMIT number;2. INSERT语句2.1 插入单条数据INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);2.2 插入多条数据INSERT INTO table_name (column1, column2, ...) VALUES(value1, value2, ...),(value1, value2, ...),...;3. UPDATE语句3.1 更新单条数据UPDATE table_nameSET column1 = value1, column2 = value2, ... WHERE condition;3.2 更新多条数据UPDATE table_nameSET column1 = value1, column2 = value2, ... WHERE condition;4. DELETE语句4.1 删除单条数据DELETE FROM table_nameWHERE condition;4.2 删除多条数据DELETE FROM table_nameWHERE condition;5. GROUP BY语句5.1 分组并计算汇总数据SELECT column1, aggregate_function(column2) FROM table_nameGROUP BY column1;5.2 过滤分组结果SELECT column1, aggregate_function(column2) FROM table_nameGROUP BY column1HAVING condition;6. JOIN语句6.1 INNER JOINSELECT column1, column2, ...FROM table1INNER JOIN table2 ON condition;6.2 LEFT JOINSELECT column1, column2, ...FROM table1LEFT JOIN table2 ON condition;6.3 RIGHT JOINSELECT column1, column2, ...FROM table1RIGHT JOIN table2 ON condition;6.4 FULL JOINSELECT column1, column2, ... FROM table1FULL JOIN table2 ON condition;7. UNION语句7.1 使用UNION合并查询结果(SELECT column1, column2, ... FROM table1)UNION(SELECT column1, column2, ... FROM table2);7.2 使用UNION ALL合并查询结果(SELECT column1, column2, ... FROM table1)UNION ALL(SELECT column1, column2, ... FROM table2);8. 子查询语句8.1 单行子查询SELECT column1, column2, ... FROM table_nameWHERE column1 = (SELECT column2 FROM table2 WHERE condition);8.2 多行子查询SELECT column1, column2, ...FROM table_nameWHERE column1 IN (SELECT column2 FROM table2 WHERE condition);9. CASE语句9.1 简单CASE语句SELECT column1,CASE column2WHEN'value1'THEN'result1'WHEN'value2'THEN'result2'ELSE'result3'ENDFROM table_name;9.2 搜索CASE语句SELECT column1,CASEWHEN condition1 THEN'result1'WHEN condition2 THEN'result2'ELSE'result3'ENDFROM table_name;以上是一些常见的SQL查询语句,希望对你的工作有所帮助。
一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack','c:\mssql7backup\MyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表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 only5、说明:删除新表drop table tabname6、说明:增加一个列Alter table tabname add column col type注:列增加后将不能删除。
DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键:Alter table tabname add primary key(col)说明:删除主键: Alter table tabname drop primary key(col)8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement删除视图:drop view viewname10、说明:几个简单的基本的sql语句选择:select * from table1 where 范围插入:insert into table1(field1,field2) values(value1,value2)删除:delete from table1 where 范围更新:update table1 set field1=value1 where 范围查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!排序:select * from table1 order by field1,field2 [desc]总数:select count as totalcount from table1求和:select sum(field1) as sumvalue from table1平均:select avg(field1) as avgvalue from table1最大:select max(field1) as maxvalue from table1最小:select min(field1) as minvalue from table111、说明:几个高级查询运算词A: UNION 运算符UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。
sql常用语句大全以下是SQL中常用的语句:1. 查询语句:用于从数据库中检索数据。
- SELECT语句:用于从表中选择数据。
- FROM语句:用于从表中选择数据。
- WHERE语句:用于筛选数据。
- ORDER BY语句:用于排序数据。
- BY语句:用于对查询结果进行分组和排序。
2. 更新语句:用于更新数据库中的数据。
- UPDATE语句:用于在表中更新数据。
- WHERE语句:用于指定更新条件。
- SET语句:用于更新数据。
3. 删除语句:用于在数据库中删除数据。
- DELETE语句:用于从表中删除数据。
- WHERE语句:用于指定删除条件。
4. 创建语句:用于创建数据库、表、索引等。
-CREATE TABLE语句:用于创建一个表。
- AS语句:用于为表命名并提供别名。
- CONSTRAINT语句:用于为表创建约束条件。
5. 插入语句:用于向数据库中插入数据。
-INSERT INTO语句:用于向表中插入数据。
- VALUES语句:用于指定插入的数据。
6. 数据定义语句:用于定义数据库中的数据模型。
- PRIMARY KEY语句:用于为表创建主键。
- FOREIGN KEY语句:用于为表创建外键。
- KEY语句:用于为表创建索引。
7. 查询优化语句:用于优化查询性能。
- ANSI JOIN语句:用于连接两个表。
- NOT NULL语句:用于指定字段是否为非空。
- UNIQUE KEY语句:用于指定字段是否唯一。
8. 视图语句:用于简化复杂的查询。
- 视图定义语句:用于定义视图。
- 视图查询语句:用于查询视图中的数据。
9. 存储过程语句:用于执行复杂的操作并将结果存储回数据库中。
- 存储过程定义语句:用于定义存储过程。
- 存储过程执行语句:用于执行存储过程。
以上是SQL中常用的语句列表,SQL语句的使用可以极大地提高数据库的性能和灵活性。
数据库查询sql语句大全一、常用查询语句1. SELECT:查询语句,用于从表中选取数据。
2. FROM:指定要查询的表名称。
4. ORDER BY:将结果集按照指定的列进行排序。
二、数据过滤语句1. WHERESELECT * FROM 表名 WHERE 列名=值; --- 查找指定值SELECT * FROM 表名 WHERE 列名<>值; --- 不等于指定值SELECT * FROM 表名 WHERE 列名>值; --- 大于指定值SELECT * FROM 表名 WHERE 列名>=值; --- 大于等于指定值SELECT * FROM 表名 WHERE 列名<值; --- 小于指定值SELECT * FROM 表名 WHERE 列名<=值; --- 小于等于指定值SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2; --- 查找指定范围内的值SELECT * FROM 表名 WHERE 列名 LIKE '值%'; --- 查找以指定值开头的值SELECT * FROM 表名 WHERE 列名 LIKE '%值'; --- 查找以指定值结尾的值SELECT * FROM 表名 WHERE 列名 LIKE '%值%'; --- 查找包含指定值的值2. INSELECT * FROM 表名 WHERE 列名 IN (值1,值2,...); --- 查找在指定值列表中的值3. NOT IN4. EXISTS6. LIKE三、运算符1. 加法 +SELECT 列名1 + 列名2 AS 别名 FROM 表名;2. 减法 -3. 乘法 *4. 除法 /5. 取模 %四、数据排序1. ORDER BYSELECT * FROM 表名 ORDER BY 列名 ASC; --- 升序排序SELECT * FROM 表名 ORDER BY 列名 DESC; --- 降序排序2. 多列排序五、数据聚合1. COUNT2. SUM3. AVG4. MAX六、数据分组SELECT 列名1,COUNT(列名2) AS 别名 FROM 表名 GROUP BY 列名1; --- 按照列名1分组,计算列名2的计数七、数据连接1. 内连接SELECT * FROM 表1 INNER JOIN 表2 ON 条件; --- 内连接表1和表2,并按照条件进行匹配八、数据更新和删除1. UPDATE2. DELETEDELETE FROM 表名 WHERE 条件; --- 删除表中满足条件的记录1. CREATE TABLEDROP TABLE 表名; --- 删除表十、数据备份和还原1. 备份mysqldump -u用户名 -p密码数据库名 > 备份文件.sql;2. 还原以上就是数据库查询SQL语句大全中文部分了。
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 允许我们把一个表里面的记录分成组。