SQL常用语法手册 - 打印版
- 格式:doc
- 大小:70.00 KB
- 文档页数:4
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==sql语法范例手册篇一:SQL语法、语句+实例大全SQL语法,SQL语句大全,SQL基础SQL语法参考手册(SQL)/数据类型201X-07-24 07:42《SQL语法参考手册(SQL)》DB2 提供了关连式资料库的查询语言SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。
此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的*作,包含了资料的定义(DDL)以及资料的处理(DML)。
SQL原来拼成SEQUEL,这语言的原型以“系统R“的名字在IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R 的技术基础发展出来 IBM 的产品。
而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以IBM SQL 为基础的标准关连式资料语言定义。
一、资料定义DDL(Data Definition Language)资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
1、建表格:Create TABLE table_name(column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],column2 DATATYPE [NOT NULL],...)说明:DATATYPE --是资料的格式,详见表。
NUT NULL --可不可以允许资料有空的(尚未有资料填入)。
PRIMARY KEY --是本表的主键。
2、更改表格Alter TABLE table_nameADD COLUMN column_name DATATYPE说明:增加一个栏位(没有删除某个栏位的语法。
sql的常用语法SQL(Structured Query Language)是用于管理关系数据库系统的标准化语言。
以下是SQL的一些常用语法:1. 创建数据库:```sqlCREATE DATABASE database_name;```2. 删除数据库:```sqlDROP DATABASE database_name;```3. 选择数据库:```sqlUSE database_name;```4. 创建表:```sqlCREATE TABLE table_name (column1 datatype,column2 datatype,...);```5. 删除表:```sqlDROP TABLE table_name;```6. 插入数据:```sqlINSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);```7. 更新数据:```sqlUPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;```8. 删除数据:```sqlDELETE FROM table_nameWHERE condition;```9. 查询数据:```sqlSELECT column1, column2, ...FROM table_nameWHERE condition;```10. 连接表:```sqlSELECT columnsFROM table1JOIN table2ON table1.column = table2.column; ```11. 排序数据:```sqlSELECT columnsFROM table_nameORDER BY column ASC|DESC;```12. 分组数据:```sqlSELECT column1, aggregate_function(column2) FROM table_nameGROUP BY column1;```13. 使用聚合函数:```sqlSELECT aggregate_function(column)FROM table_name;```14. 使用通配符:```sqlSELECT *FROM table_name;```15. 使用条件运算符:```sqlSELECT columnsFROM table_nameWHERE column1 = value1 AND column2 > value2;```这只是SQL语法的一小部分,SQL还包含其他功能,如子查询、视图、存储过程等。
sql语句语法SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言。
以下是一些基本的SQL语句及其语法,供参考:1.查询数据(SELECT):```sqlSELECT列名1,列名2FROM表名WHERE条件;```示例:```sqlSELECT姓名,年龄FROM学生表WHERE班级='A班';```2.插入数据(INSERT):```sqlINSERT INTO表名(列名1,列名2,列名3)VALUES(值1,值2,值3);```示例:```sqlINSERT INTO学生表(姓名,年龄,班级)VALUES('张三',18,'A班');```3.更新数据(UPDATE):```sqlUPDATE表名SET列名1=值1,列名2=值2WHERE条件;```示例:```sqlUPDATE学生表SET年龄=19WHERE姓名='张三'; ```4.删除数据(DELETE):```sqlDELETE FROM表名WHERE条件;```示例:```sqlDELETE FROM学生表WHERE姓名='张三';```5.创建表(CREATE TABLE):```sqlCREATE TABLE表名(列名1数据类型1,列名2数据类型2,列名3数据类型3,...);```示例:```sqlCREATE TABLE学生表(学号INT PRIMARY KEY,姓名VARCHAR(50),年龄INT,班级VARCHAR(10));```6.删除表(DROP TABLE):```sqlDROP TABLE表名;```示例:```sqlDROP TABLE学生表;```请注意,实际使用时需要根据数据库管理系统(如MySQL、PostgreSQL、SQLite等)的不同做相应的调整。
此外,SQL语句中的关键字一般为大写,但并非强制性要求。
SQL SELECT 语法SELECT 列名称 FROM 表名称以及:SELECT * FROM 表名称SQL SELECT 实例 如需获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表) , 请使用类似这样的 SELECT 语句:SELECT LastName,FirstName FROM Persons"Persons" 表:Id 1 2 3 LastName Adams Bush Carter FirstName John George Thomas Address Oxford Street Fifth Avenue Changan Street City London New York Beijing结果:LastName Adams Bush Carter FirstName John George ThomasSQL SELECT * 实例 现在我们希望从 "Persons" 表中选取所有的列。
请使用符号 * 取代列的名称,就像这样:SELECT * FROM Persons如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:SELECT DISTINCT Company FROM Orders现在,在结果集中,"W3School" 仅被列出了一次。
WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
语法SELECT 列名称 FROM 表名称 WHERE 列 运算符 值使用 WHERE 子句 如果只希望选取居住在城市 "Beijing" 中的人,我们需要向 SELECT 语句添加 WHERE 子句:SELECT * FROM Persons WHERE City='Beijing'"Persons" 表LastName Adams Bush Carter Gates FirstName John George Thomas Bill Address Oxford Street Fifth Avenue Changan Street Xuanwumen 10 City London New York Beijing Beijing Year 1970 1975 1980 1985结果:LastName Carter Gates FirstName Thomas Bill Address Changan Street Xuanwumen 10 City Beijing Beijing Year 1980 1985引号的使用 请注意,我们在例子中的条件值周围使用的是单引号。
【最新整理,下载后即可编辑】SQL语句的概述SQL语言的分类数据定义语言(Data Definition Language)主要用于修改、创建和删除数据库对象,其中包括CREATE ALTER DROP语句。
数据查询语言(Data Query Language)主要用于查询数据库中的数据,其主要是SELECT语句,SELECT语句包括五个子句,分别是FROM WHERE HAVING GROUP BY 和WITH语句。
数据操作语言(Data Manipulation Language)主要用于更新数据库里数据表中的数据,包括INSERT UODATE DELETE语句。
数据控制语言(Data Control Language)主要用于授予和回收访问数据库的某种权限。
包括GRANT REVOKE等语句。
事物控制语言,主要用于数据库对事物的控制,保证数据库中数据的一致性,包括COMMIT ROLLBACK语句。
常用的数据类型MYSQL:整型SQL语句的书写规范SQL语句中不区分关键字的大小写SQL语句中不区分列名和对象名的大小写SQL语句对数据库中数据的大小写敏感SQL语句中使用--注释,当使用--注释时,--后面至少有--个空格,多行注释用/* */数据库的创建与删除数据库的创建CREATE DATABASE database_name;在MYSQL COMMAND LINE CLIENT中书写SQL语句时,在SQL语句后面都要加上分号数据库的删除DROP DATABASE database_name;数据表的创建与更新数据库中的表数据记录:在数据表中的每一行被称为数据记录字段:数据表中的每一列被称为字段主键(PRIMARY KEY):作为数据表中唯一的表示,保证了每一天数记录的唯一性。
主键在关系数据库中约束实体完整性。
所谓的实体完整性,是指对数据表中行的约束。
外键(FOREIGN KEY):外键用来定义表与表之间的关系。
关系数据库常⽤SQL 语句语法⼤全创建表语法CREATE TABLE <表名>(<列名> <数据类型>[列级完整性约束条件][,<列名> <数据类型>[列级完整性约束条件]]…);列级完整性约束条件有NULL[可为空]、NOT NULL[不为空]、UNIQUE[唯⼀],可以组合使⽤,但是不能重复和对⽴关系同时存在。
⽰例-- 创建学⽣表CREATE TABLE Student ( Id INT NOT NULL UNIQUE PRIMARY KEY, Name VARCHAR(20) NOT NULL, Age INT NULL, Gender VARCHAR(4) NULL);删除表语法DROP TABLE <表名>;⽰例-- 删除学⽣表DROP TABLE Student;清空表语法TRUNCATE TABLE <表名>;⽰例-- 删除学⽣表TRUNCATE TABLE Student;修改表######语法-- 添加列ALTER TABLE <表名> [ADD <新列名> <数据类型>[列级完整性约束条件]]-- 删除列ALTER TABLE <表名> [DROP COLUMN <列名>]-- 修改列ALTER TABLE <表名> [MODIFY COLUMN <列名> <数据类型> [列级完整性约束条件]]⽰例-- 添加学⽣表`Phone`列ALTER TABLE Student ADD Phone VARCHAR(15) NULL;-- 删除学⽣表`Phone`列ALTER TABLE Student DROP COLUMN Phone;-- 修改学⽣表`Phone`列ALTER TABLE Student MODIFY Phone VARCHAR(13) NULL;SQL 查询语句语法SELECT [ALL|DISTINCT] <⽬标列表达式>[,<⽬标列表达式>]…FROM <表名或视图名>[,<表名或视图名>]…[WHERE <条件表达式>][GROUP BY <列名> [HAVING <条件表达式>]][ORDER BY <列名> [ASC|DESC]…]SQL 查询语句的顺序:SELECT 、FROM 、WHERE 、GROUP BY 、HAVING 、ORDER BY 。
下列语句部分是Mssql语句,不可以在access中使用。
SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,简要介绍基础语句: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注:索引是不可更改的,想更改必须删除重新建。
[code=SQL][/code]--语句功能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREA TE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREA TE VIEW --创建一个视图DROP VIEW --从数据库中删除视图CREA TE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引CREA TE PROCEDURE --创建一个存储过程DROP PROCEDURE --从数据库中删除存储过程CREA TE TRIGGER --创建一个触发器DROP TRIGGER --从数据库中删除触发器CREA TE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREA TE 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.08when job_level = '2' then e_wage*1.07when job_level = '3' then e_wage*1.06else e_wage*1.05end--WHILE CONTINUE BREAKdeclare @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 stockiddesc(asc) --------- 排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)--------- 子查询--------- 除非能确保内层select只返回一个行的值,--------- 否则应在外层where子句中用一个in限定符select distinctcolumn_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_helptable_name ---- 显示表已有特征create table table_name (name char(20), age smallint, lnamevarchar(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 值的以弧度表示的角A TAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角A TAN2(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/FLOA T 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOA T 类型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>) --函数以整数值的形式返回日期的指定部分GETDA TE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DA TALENGTH() --函数返回数据表达式的数据的实际长度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() --函数返回一个unique identifier UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值。
SQL语法速成手册,建议收藏!Python编程学习圈全球Python编程中文开发者的圈子,提供Python编程技术文章知识分享、技术专栏、原创视频教程、题库,内容涉及WEB全栈开发、爬虫、数据分析、自然语言、图像处理、机器学习、自动化测试、自动化运维、大数据等。
2篇原创内容公众号本文针对关系型数据库的一般语法。
限于篇幅,本文侧重说明用法,不会展开讲解特性、原理。
1基本概念数据库术语•数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)•数据表(table):某种特定类型数据的结构化清单•模式(schema):关于数据库和表的布局及特性的信息。
模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。
数据库和表都有模式•列(column):表中的一个字段。
所有表都是由一个或多个列组成的•行(row):表中的一个记录•主键(primary key):一列(或一组列),其值能够唯一标识表中每一行SQL 语法SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为ANSI SQL。
各个DBMS 都有自己的实现,如PL/SQL、Transact-SQL 等。
1.SQL 语法结构SQL 语法结构包括:•子句:是语句和查询的组成成分。
(在某些情况下,这些都是可选的。
)•表达式:可以产生任何标量值,或由列和行的数据库表•谓词:给需要评估的SQL 三值逻辑(3VL)(true/false/unknown)或布尔真值指定条件,并限制语句和查询的效果,或改变程序流程•查询:基于特定条件检索数据。
这是 SQL 的一个重要组成部分•语句:可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断2.SQL 语法要点•SQL 语句不区分大小写,但是数据库表名、列名和值是否区分,依赖于具体的 DBMS 以及配置。
一、利用SELECT 语句选取资料1. SELECT语法基本构架2. 选取全部资料3. 指定字段4. 选取不重复资料5. 衍生字段6. 资料排序7. 资料分组8. 加上选择条件9. 使用通配符10. 表之间的关联 Join11. 子查询12. UNION二、操作数据库记录1. 利用INSERT 语句新增记录2. 由其他表选取资料新增到指定表中3. 删除表中的记录4. 更新数据三、常用函数1. 汇总函数2. 字符串函数四、游标 CURSOR1. CURSOR定义的基本语法2.打开CURSOR3.提取CURSOR中的记录4.使用WHILE 循环语句遍历CURSOR5.释放CURSOR五、创建临时表六、创建存储过程 (CREATE PROCDURE)1.创建存储过程的基本语法2.删除存储过程3.执行存储过程4.定义变量5.为变量赋值6.一个典型的实例一、利用SELECT 语句选取资料1.SELECT 语法基本构架SELECT 字段1,字段2,…字段nFROM 表1,表2,…表nWHERE 条件GROUP BY 字段1,字段2,…字段nORDER BY字段1,字段2,…字段n字段可以是数据表中所定义的字段,也可以是一衍生字段。
在SELECT语句中可以一次选择数个字段,但每个字段之间必须以逗号隔开。
数据表在SELECT语句中可以一次指定一个或数个数据表,当指定一个以上表时就牵涉到表之间的关联(Join)。
条件资料选取时的设定条件,可以设定大于,小于或等于等基本判断条件,而且可以指定多个条件,每个条件之间以‘AND’或‘OR’逻辑运算符连接。
ORDER BY 、GROUP BY对选取的数据进行排序(Sorting)和分组(Grouping)等动作。
例1:想要知道库存数据为负数且使用中物料有哪些?EX: SELECT DISTINCT pt_part, pt_desc1, pt_desc2, pt_umFROM pt_mstr, ld_detWHERE pt_part = ld_part ANDPt_status = 1 AND (使用中)Ld_qty_oh < 0 (库存为负)ORDER BY pt_part (按物料编码排序)2.选取全部数据要浏览整张数据表内的数据时,只要用 SELECT * 即可。
SQL常用语法手册相应符号说明:-- 后面就是注释说明,不参与执行{} 内是必须写的内容[] 内可以不写| 表示或者<>内的数据要写一、数据库1.创建数据库格式:create database <数据库名>on(name=数据库文件名,filename='数据库存放的物理位置',size=数据库初始化大小,filegrowth=文件增长率,maxsize=最大文件大小)log on(name=,filename=,size=,filegrowth=,maxsize=)2.删除数据库格式:drop database <数据库名称>二、表格1.创建表格式:create table <表名>( <列名> <列类型> <列说明>…,[constraint <约束名称><约束条件>] )<列类型>是列的数据类型。
<列说明>说明列的长度、列的默认值、主键等有关该列的约束条件。
2.修改表格式:alter table <表名>{ add <列说明>| drop column <列名>| alter column <列说明>| add <约束说明>| drop <约束> }3.删除表格式:drop table <表名>4.创建主键约束:constraint 主键约束名primary key(被定义为主键的列名)5.创建外键约束:constratint 外键约束名foreign key(本表中作为外键的列名) references 参照表(参照列) 6.check约束格式:constraint <约束名称> check (<表达式>)本章节例子create table 学生基本信息表( 学号char(4) not null constraint PK_学号primary key,性别char(2) not null default('男') constraint CK_性别check (性别='男'or 性别='女'),出生日期datetime not null,奖学金money default(0) constraint CK_奖学金check (奖学金>=0 and 奖学金<=5000),constraint CK_日期check (出生日期<入学日期) )三、操纵数据1.插入数据格式:insert into <表名> [(列名)] values(<对应列的值表>)列名可以不用写,但是values()里面的数据,就必须跟表格内的列相对应上,如果写列名,values()内的内容就是跟列名相对应的。
2.修改数据格式:update<表名>set <列>=<值>[,<列>=<值>][where <定位条件>]3.删除数据格式:delete from <表名>[where<条件>]四、Select语句select <输出结果列表> from<表>[where<选择条件>][order by<排序条件>][group by<分类条件>]<排序条件>对输出结果进行排序的列明和次序说明<分类条件>是分组统计的标准select语句的几点补充1.distinct关键字:select distinct 列名from 表名作用:可以从查询结果中去除重复的数据行2.TOP关键字:select top n [percent] <列名> from <表名>top n:表示返回前n行数据top n percent:表示返回百分之n的数据3.下几个关键字多用于where子句between and 操作符举例来说明where 奖学金between 300 and 500表示的就是奖学金在300到500的范围,包含300和500。
等价于下面表达式where 奖学金>=300 and 奖学金<=500IN操作符:表达式或者字段名[not] in (列表或者子查询)用于:表示根据表达式是包含在指定范围内还是范围外来制定表达式的搜索。
all操作符any操作符:all和any 都是在select语句中包含where子句时,才有意义。
语法如下:<列名> < | > | != | <= | >= [all] | [any] <查询语句>例子如下:select 学号,姓名from 学生基本信息表where 出生日期< all(select 出生日期from 学生基本信息表where 院系名称='商学院') and 院系名称='信息学院'结果就是:查询信息学院的学生中比商学院任一学生年龄都大的学生学号和姓名如果把all换成any,表示的就是查询信息学院的学生中比商学院某一个学生的年龄大的学生学号和姓名all 等价于and 逻辑关系,any相当于or 逻辑关系exists操作符:[not] exists <子查询>用于:测试子查询中是否有结果行,如果有返回真值,否则返回假。
LIKE关键字P200:<字符串表达式> [not] like <可以带通配符串表达式>通配符有四种:%表示任意个字符_ 表示1个任意字符[] 表示可以在方括号里列出的任意一个字符[^] 表示不在方括号里列出的任意一个字符like用处:当不能精确知道查询条件是使用。
空值:在要查询中使用空值,需要在where子句中使用is null 或者is not null。
举例where 备注is null 表示找到符合备注数据中是null的数据行where 备注is not null 表示找到备注数据中不是null的数据行空值输出:isnull (<检查表达式>,<替换值>)<检查表达式>将被检查是否为null的表达式,可以是任何类型<替换值>代替显示空值的值4.group by对于group by子句中的列,在使用上有一个限制,出现在查询的select列表中的列必须同时出现在group by子句中group by子句都会于聚合函数使用。
聚合函数可以用于表的所有行,不局限于group by子句:count([distinct]<列名>) 统计<列名>中数值的个数,如果使用distinct就是先去除重复的数值,然后再进行统计。
count(*) 表示统计结果行max()最大值min()最小值sum()求和avg()求平均--------------------------------------having子句常与group by 子句连用,用法跟where子句类似。
5.本章练习题书P237,三、练习题2(1)查询学生基本信息表、课程表、成绩表三张表的笛卡尔积的结果集中元组个数select count(*) from 学生基本信息表,课程表,成绩表(2)查询所有学生的学号、姓名、选课名称和成绩select x.学号,x.姓名,k.课程名称,c.考试成绩from 学生基本信息表x,课程表k,成绩表cwhere x.学号=c.学号and k.课程号=c.课程号(3)查询每门课的平均成绩select k.课程名称,avg(c.考试成绩) as '平均成绩' from 课程表k,成绩表cwhere c.课程号=k.课程号group by k.课程名称(4)查询说有女生的姓名和选课成绩select x.姓名,k.课程名称,c.考试成绩from 学生基本信息表x,课程表k,成绩表cwhere x.学号=c.学号and k.课程号=c.课程号and x.性别='女'(5)查询至少选修了两门课程的学生学号和姓名select x.学号,x.姓名from 学生基本信息表x,成绩表cwhere x.学号=c.学号group by x.学号,x.姓名having count(c.课程号)>=2(6)查询平均分数大于等于80分的学生学号select 学号from 成绩表group by 学号having avg(考试成绩) >=80五、视图1.创建视图create view <视图名>(<列名>……)[with encryption]as <查询>[with check option]<列名>新视图中的列名,与<查询>中的列名对应<查询>是定义视图的select语句with encryption:视图语句定义内容加密。
with check option:如果修改数据不满足视图定义条件,则不允许修改。
2.修改视图alter view <视图名>(<列名>……)[with encryption]as <查询>[with check option]3.删除视图drop view <视图名>4.举例(1)建立视图,名称“学生平均成绩”,它由学号、姓名、平均考试成绩三列组成。
create view 学生平均成绩(学号,姓名,平均成绩)as select x.学号,x.姓名,avg(c.考试成绩) as '平均成绩'from 学生基本信息表x,成绩表cwhere x.学号=c.学号group by x.学号,x.姓名(2)根据“学生平均成绩”视图,查询学习成绩优秀(平均成绩>=90)的学生学号select 学号from 学生平均成绩where 平均成绩>=90六、索引1.创建索引create [unique][clustered]|[nonclustered]index <索引名称>on <表名>(<列名>[,<列名>])其中:unique:唯一性索引clustered:聚集索引nonclustered:非聚集索引2.举例(3)在学生基本信息表上为出生日期建立索引,名称“年龄大小索引”create index 年龄大小索引on 学生基本信息表(出生日期)2.删除索引drop index <索引名称>七、存储过程1.创建存储过程create procedure <存储过程名>[{@<参数名><数据类型>[output]}]as{<SQL语句>|<语句块>}<参数名>是存储过程的输入输出参数<SQL语句>或<语句块>定义存储过程内容的语句2.修改存储过程alter procedure <存储过程名>[{@<参数名><数据类型>[output]}]as{<SQL语句>|<语句块>}3.删除存储过程drop procedure <存储过程名>4.存储过程的重命名exec sp_rename 旧名字,新名字5.举例建立一个存储过程get_age 能够根据输入参数param_sno(表示学号),显示该学生的年龄值create procedure get_age @param_sno char(4)asselect (year(getdate())-year(出生日期))as '年龄'from 学生基本信息表where 学号=@param_sno6.<SQL语句>|<语句块>1)语句块一个语句块可以有多个SQL语句,每个语句块从begin关键字开始,以end关键字结束begin<语句>……end2)if语句if语句是一个条件判断语句if<逻辑表达式>{<SQL语句>|<语句块>}[else{<SQL语句>|<语句块>} ]3)局部变量适用于在处理过程中存储临时计算数据,定义格式如下declare @变量名数据类型[,@变量名]赋值格式set @变量名= 一个值4)return语句用于无条件终止一个查询、存储过程、批处理的执行。