SQL基本语句诠释
- 格式:doc
- 大小:43.50 KB
- 文档页数:6
sql语句的基本要点1. 概述SQL(Structured Query Language)是用于管理和操作关系型数据库的编程语言。
它允许用户定义、操纵和查询数据库中的数据。
SQL 语句是用来执行各种数据库操作的指令,包括创建表、插入、更新、删除数据以及查询数据等。
2. 基本语法SQL语句通常由关键字、表名、字段名和运算符等组成,在执行SQL 语句之前,需要先连接到数据库,然后通过执行语句来实现相应的操作。
下面是SQL语句的基本要点:- 创建表:使用CREATE TABLE语句可以创建一个新的表,该语句包括表名和定义表结构的字段名、数据类型等信息。
例如:```CREATE TABLE customers (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(50));- 插入数据:使用INSERT INTO语句可以向表中插入新的数据。
语句中需要指定要插入数据的表名和要插入的字段及其对应的值。
例如:```INSERT INTO customers (id, name, email)VALUES(1,'JohnSmith','*********************');```- 更新数据:使用UPDATE语句可以更新表中的数据。
需要指定要更新的表名、要更新的字段和更新后的值,以及更新的条件(可选)。
例如:```UPDATE customersSET name = 'Jane Doe'WHERE id = 1;```- 删除数据:使用DELETE FROM语句可以删除表中的数据。
需要指定要删除的表名和删除的条件。
例如:DELETE FROM customersWHERE id = 1;```- 查询数据:使用SELECT语句可以从数据库中查询数据。
可以选择要查询的字段、要查询的表和查询的条件等。
例如:```SELECT id, name, emailFROM customersWHERE name LIKE 'J%';```3. 注意事项在编写SQL语句时,需要注意以下几点:- 语法正确性:SQL语句需要遵循特定的语法规则,包括正确使用关键字、正确书写表名、字段名和运算符等。
当您执行SQL语句时,您正在与数据库进行交互,以执行诸如查询、插入、更新或删除数据等操作。
下面我将解释一些常见的SQL语句的含义。
1. SELECT语句:用于从数据库表中检索数据。
它允许您指定要检索的列和行条件。
例如:```sqlSELECT * FROM customers WHERE country='USA';```上述语句将选择名为"customers"的表中所有符合条件"country='USA'"的行,并返回所有列的数据。
2. INSERT语句:用于向数据库表中插入新数据。
它允许您指定要插入的列和相应的值。
例如:```sqlINSERT INTO customers (customer_name, country) VALUES ('John Doe', 'USA');```上述语句将在名为"customers"的表中插入一行数据,包含"customer_name"和"country"两个列,对应的值分别为"John Doe"和"USA"。
3. UPDATE语句:用于更新数据库表中的现有数据。
它允许您指定要更新的列以及更新条件。
例如:```sqlUPDATE customers SET country='Canada' WHERE country='USA';```上述语句将更新名为"customers"表中所有符合条件"country='USA'"的行,将"country"列的值更改为"Canada"。
4. DELETE语句:用于从数据库表中删除数据。
它允许您指定删除条件。
SQL语句总结一、插入记录1.插入固定的数值语法:INSERT [INTO] 表名[(字段列表)] VALUES(值列表)示例1:Insert into Students values('Mary’,24,’’)若没有指定给Student表的哪些字段插入数据:<情况一>表示给该表的所有字段插入数据,根据数据的个数,可以得知Students表中一共有3个字段<情况二>表中有4个字段,其中一个字段是标识列。
示例2:Insert into Students(Sname,Sage) values(‘Mary’,24)指定给表中的Sname,Sage两个字段插入数据。
注意事项:1)该命令运行一次向表中插入1条记录。
无法实现向已存在的某记录中插入一个数据2)如果不指定给哪些字段插入数值,则应注意值列表的值个数3)插入数据时,注意值的数据类型要与对应的字段数据类型匹配4)插入数据时,如果没有给值的字段必须保证允许其为空5)插入数据时,要注意字段中的一些约束2.插入的记录集为一个查询结果语法:INSERT INTO 表名[(字段列表)] SELECT 字段列表 FROM 表 WHERE 条件示例1:Insert into Teacher select Sname,Sage,Semail from Student从Student表中查询三个字段的全部记录,插入Teacher表,没有指定Teacher表的具体字段,表示给Teacher表的全部字段插入数值示例2:Insert into Teacher select Sname,Sage,Semail from Student where Sage>25从Student表中查询三个字段的部分记录,插入Teacher表示例3:Insert into Teacher(tid,tname)select Sname , Sage from Student从Student表中查询两个字段的全部记录,插入到Teacher表中的tid,tname字段注意事项:查询表的字段要和插入表的字段数据类型一一对应3.生成表查询语法:SELECT 字段列表 INTO 新表名 FROM 原表 WHERE 条件示例1:Select Sname,Sage,Semail into newStudent from Student where Sage<20 从Student表中查询出年龄小于20岁的学生的记录生成新表newStudent示例2:Select Sname,Sage,Semail into newStudent from Student where 1=2利用Student表的表结构生成新表newStudent,newStudent表中记录为空注意事项:执行该语句时,确保数据库中不存在into关键字后面的指定的表名二、删除记录1)删除满足条件的记录语法:DELETE FROM 表名 WHERE 条件示例1:Delete from Student where Sage<20从Student表中删除年龄小于20岁的学生的记录示例2:Delete from Student没有设置条件,删除Student表的全部记录2)删除表的全部记录语法:TRUNCATE TABLE 表名示例:Truncate table Student删除表Student中的全部记录,约束依然存在三、修改记录语法:UPDATE 表名 SET 字段=新值 WHERE 条件示例1:Update Student set Semail=’Email’+Semail where Semail is not null把有email的学员的email地址变为原先的地址前加上‘Email’字符串示例2:Update Student set Sage=Sage+1把所有记录的Sage变为原先的值加1,例如过一年学生要长一岁四、查询记录1.基本查询语法:SELECT 字段列表 FROM 表示例1:Select sName,sAge,sEmail from Students从Students表中查询3个字段的所有的记录示例2:Select * from Students从Students表中查询所有字段的所有的记录(字段列表位置写*代表查询表中所有字段)2.带WHERE子句的查询语法:SELECT 字段列表 FROM 表 WHERE 条件示例1:Select SName from Students where Sage>23查询Students表中年龄大于23的学员的姓名3.应用别名语法1:SELECT 字段列表 AS 别名……示例1:Select SName as 学员姓名,sAge as 学员年龄 from Students将查询的两个字段分别用中文别名显示语法2:SELECT 别名=字段……示例2:Select 学员姓名=sName, 学员年龄=sAge from Students注意事项:别名可以是英文,也可以是中文,别名可以用单引号引起,也可以不引4.使用常量(利用‘+’连接字段和常量)示例:Select sName+’的年龄是’+convert(varchar(2),sAge) as 学员信息from Students从Students表中查询,将学员的姓名和年龄信息与一个常量连接起来,显示为一个字段,该字段以“学员信息”为别名5.限制返回的行数语法1:SELECT TOP N 字段列表 FROM 表示例1:Select top 3 sName,sAge from Students查询Students表的前三条记录语法2:SELECT TOP N PERCENT 字段列表 FROM 表示例2:Select top 30 percent sName,sAge from Students查询Students表的前30%条记录6.排序语法:SELECT 字段列表 FROM 表 WHERE 条件 ORDER BY 字段 ASC/DESC示例1:Select * from Students where sAge>20 order by sAge查询年龄大于20岁的学员信息,并且按照年龄升序排序(若不指定升降序,默认为升序)示例2:Select * from Students order by sName desc查询所有学生的所有信息,并按照学生的姓名降序排序7.模糊查询1)Like:通常与通配符结合使用,适用于文本类型的字段示例1:Select * from Students where sName like ‘张_’查询Students表中张姓的,两个字名的学生信息示例2:Select * from Students where sName like ‘张%’查询Students表中张姓的学生的信息示例3:Select * from Students where sEmail like ‘%@[a-z]%’查询Students表中,Semail字段‘@’后的第一个字符为小写英文字母的学生信息示例4:Select * from Students where stuName like ‘%@[^a-z]%’查询Students表中,Semail字段‘@’后的第一个字符不是小写英文字母的学生信息2)Between …and …:用于查询条件为一个字段介于两个值之间示例:Select * from Students where Sage between 20 and 25查询学员年龄在20到25之间的学员信息3)In:用于查询某个字段在值列表中出现作为条件示例:Select * from Students where Scity in (‘大连’,’沈阳’,’北京’) 查询学员的城市在大连,沈阳或北京的学员信息,等价于如下功能:Select * from Students where Scity=’大连’or Scity=’沈阳’or Scity=’北京’4)Is null:用于查询某个字段为空作为条件示例:Select * from Students where Semail is null查询学员的email为空的学员信息Select * from Students where semail is not null查询学员的email不为空的学员信息8.聚合函数(所有函数自动忽略空值)1)Sum():统计某字段的和,用于数值型数据示例:Select sum(Sage) as 学员的年龄和 from Student统计Students表中所有学员的年龄总和,显示结果为一个字段一条记录2)Avg():统计某字段的平均值,用于数值型数据示例:Select avg(Sage) as 学员的平均年龄 from Students统计Students表中所有学员的年龄的平均值,显示结果为一个字段一条记录3)Max():统计某字段的最大值,用于数值,文本,日期型4)Min():统计某字段的最小值,用于数值,文本,日期型示例:Select max(Sage) as 最大年龄 , min(Sage) as 最小年龄 from Students查询Students表中的学员的最大年龄和最小年龄,显示结果为两个字段一条记录5)Count():统计某字段的记录数或者表的记录数示例1:Select count(Semail) as email的数量 from Students查询Students表中,有email的学员的数量。
基础sql语句1. SELECT: 用于查询表中的数据,可以使用通配符(*)表示所有列或者指定列名。
例子:SELECT * FROM table_name;2. FROM: 用于指定查询的数据来源,即需要查询哪张表。
例子:SELECT * FROM table_name;3. WHERE: 用于筛选满足条件的数据行,可以使用比较运算符(>,<,=,!=,>=,<=)等。
例子:SELECT * FROM table_name WHEREcolumn_name >= 10;4. ORDER BY: 用于将查询结果按照某个列进行排序,可以指定升序或降序(ASC或DESC)。
例子:SELECT * FROM table_name ORDER BYcolumn_name ASC;5. GROUP BY: 用于将查询结果按照某个列进行分组,通常使用聚合函数(SUM,COUNT,AVG,MAX,MIN)进行数据计算。
例子:SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;6. LIMIT: 用于限制查询结果的数量,只返回前几条数据。
例子:SELECT * FROM table_name LIMIT 10;7. JOIN: 用于将多张表按照共同的字段进行连接,可以有多种连接方式(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL OUTER JOIN)。
例子:SELECT * FROM table1 LEFT JOIN table2 ONtable1.column_name = table2.column_name.。
SQL查询语句大全讲解SQL(Structured Query Language,结构化查询语言)是用于管理关系型数据库的标准语言。
在开发和管理数据库时,我们常常需要使用SQL查询语句来从数据库中检索数据。
本文将为您介绍一些常用的SQL查询语句,以帮助您更好地理解和使用SQL。
1. SELECT语句SELECT语句用于从数据库中检索数据。
它的基本语法如下:SELECT列名1, 列名2, ...FROM表名WHERE条件;其中,*表示选取所有列。
下面是一些常用的SELECT语句示例:•选取所有列:SELECT*FROM表名;•选取指定列:SELECT列名1, 列名2 FROM表名;•带有条件的查询:SELECT列名FROM表名WHERE条件;2. WHERE子句WHERE子句用于过滤SELECT语句中的数据。
它可以使用各种条件来指定查询的数据。
以下是一些常用的WHERE子句示例:•等于(=):SELECT列名FROM表名WHERE列名=值;•不等于(<>):SELECT列名FROM表名WHERE列名<>值;•大于(>):SELECT列名FROM表名WHERE列名>值;•小于(<):SELECT列名FROM表名WHERE列名<值;•大于等于(>=):SELECT列名FROM表名WHERE列名>=值;•小于等于(<=):SELECT列名FROM表名WHERE列名<=值;3. ORDER BY子句ORDER BY子句用于对查询结果进行排序。
可以按升序(ASC)或降序(DESC)来排序。
以下是一些常用的ORDER BY子句示例:•按列升序排序:SELECT列名FROM表名ORDER BY列名ASC;•按列降序排序:SELECT列名FROM表名ORDER BY列名DESC;4. GROUP BY子句GROUP BY子句用于按照指定的列对查询结果进行分组。
sql的基本语句SQL是Structured Query Language的缩写,是一种用于数据库管理的编程语言。
SQL的基本语句包括:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。
1. SELECTSELECT语句用于查询数据库中的数据。
它的基本语法是:SELECT column1, column2, ... FROM table_name;其中,column1、column2等是要查询的列名,可以是一个或多个。
table_name是要查询的表名。
2. FROMFROM语句用于指定要查询的表。
它的基本语法是:SELECT column1, column2, ... FROM table_name;其中,table_name是要查询的表名。
3. WHEREWHERE语句用于筛选查询结果。
它的基本语法是:SELECT column1, column2, ... FROM table_name WHERE condition;其中,condition是筛选条件,可以是一个或多个条件。
4. GROUP BYGROUP BY语句用于根据一列或多列对查询结果进行分组。
它的基本语法是:SELECT column1, column2, ... FROM table_name WHERE condition GROUP BY column1, column2, ...;其中,column1、column2等是要分组的列名,可以是一个或多个。
5. HAVINGHAVING语句用于筛选分组后的结果集。
它的基本语法是:SELECT column1, column2, ... FROM table_name WHERE condition GROUP BY column1, column2, ... HAVING condition;其中,condition是筛选条件,可以是一个或多个条件。
SQL基础知识大全SQL语言由命令、子句、运算和集合函数等构成。
在SQL中,数据定义语言DDL(用来建立及定义数据表、字段以及索引等数据库结构)包含的命令有CREATE、DROP、ALTER;数据操纵语言DML(用来提供数据的查询、排序以及筛选数据等功能)包含的命令有SELECT、INSERT、UPDATE、DELETE。
一、SQL语句(1)Select 查询语句语法:SELECT [ALL|DISTINCT] <目标列表达式> [AS 列名][,<目标列表达式> [AS 列名] ...] FROM <表名> [,<表名>…][WHERE <条件表达式> [AND|OR <条件表达式>...][GROUP BY 列名[HAVING <条件表达式>]][ORDER BY 列名[ASC | DESC]]解释:[ALL|DISTINCT] ALL:全部;DISTINCT:不包括重复行<目标列表达式> 对字段可使用A VG、COUNT、SUM、MIN、MAX、运算符等<条件表达式>查询条件谓词比较=、>,<,>=,<=,!=,<>,确定范围BETWEEN AND、NOT BETWEEN AND确定集合IN、NOT IN字符匹配LIKE(“%”匹配任何长度,“_”匹配一个字符)、NOT LIKE空值IS NULL、IS NOT NULL子查询ANY、ALL、EXISTS集合查询UNION(并)、INTERSECT(交)、MINUS(差)多重条件AND、OR、NOT<GROUP BY 列名> 对查询结果分组[HA VING <条件表达式>] 分组筛选条件[ORDER BY 列名[ASC | DESC]] 对查询结果排序;ASC:升序DESC:降序例1:select student.sno as 学号, as 姓名, course as 课程名, score as 成绩from score,student where student.sid=score.sid and score.sid=:sid例2:select student.sno as 学号, as 姓名,A VG(score) as 平均分from score,student where student.sid=score.sid and student.class=:class and (term=5 or term=6) group by student.sno, having count(*)>0 order by 平均分DESC例3:select * from score where sid like '9634'例4:select * from student where class in (select class from student where name='陈小小')(2)INSERT插入语句语法:INSERT INTO <表名> [(<字段名1> [,<字段名2>, ...])] V ALUES (<常量1> [,<常量2>, ...])语法:INSERT INTO <表名> [(<字段名1> [,<字段名2>, ...])] 子查询例子:INSERT INTO 借书表(rid,bookidx,bdate)V ALUES (edit1.text,edit2.text,date)例子:INSERT INTO score1(sno,name) SELECT sno,name FROM student WHERE class=‟9634‟(3)UPDATE-SQL语法:UPDA TE 〈表名〉SET 列名1 = 常量表达式1[,列名2 = 常量表达式2 ...]WHERE <条件表达式> [AND|OR <条件表达式>...]例子:update score set credithour=4 where course='数据库'(4)DELETE-SQL语法:DELETE FROM〈表名〉[WHERE <条件表达式> [AND|OR <条件表达式>...]]例子:Delete from student where sid='003101'(5)CREATE TABLECREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE](FieldName1 FieldType [(nFieldWidth [, nPrecision])][NULL | NOT NULL][CHECK lExpression1 [ERROR cMessageText1]][DEFAULT eExpression1][PRIMARY KEY | UNIQUE][REFERENCES TableName2 [TAG TagName1]][NOCPTRANS][, FieldName2 ...][, PRIMARY KEY eExpression2 TAG TagName2|, UNIQUE eExpression3 TAG TagName3][, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]REFERENCES TableName3 [TAG TagName5]][, CHECK lExpression2 [ERROR cMessageText2]])| FROM ARRAY ArrayName(6)ALTER TABLEALTER TABLE TableName1ADD | ALTER [COLUMN] FieldName1FieldType [(nFieldWidth [, nPrecision])][NULL | NOT NULL][CHECK lExpression1 [ERROR cMessageText1]][DEFAULT eExpression1][PRIMARY KEY | UNIQUE][REFERENCES TableName2 [TAG TagName1]][NOCPTRANS](7)DROP TABLEDROP TABLE [路径名.]表名(8)CREATE INDEXCREATE INDEX index-name ON table-name(column[,column…])例:CREATE INDEX uspa ON 口令表(user,password)(9)DROP INDEXDROP INDEX table-name.index-name|PRIMARY例:DROP INDEX 口令表.uspa二、在程序中使用静态SQL语句在程序设计阶段,将SQL命令文本作为TQuery组件的SQL属性值设置。
Sql语句语法及释义(一)SELECT:语法:SELECT 列名称FROM 表名称释义:SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。
DISTINCT:语法:SELECT DISTINCT 列名称FROM 表名称释义:在表中,可能会包含重复值。
这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词DISTINCT 用于返回唯一不同的值。
WHERE:语法:SELECT 列名称FROM 表名称WHERE 列运算符值释义:WHERE 子句用于规定选择的标准。
如需有条件地从表中选取数据,可将WHERE 子句添加到SELECT 语句。
ORDER BY:语法:SELECT 列名称FROM 表名称ORDER BY列名称释义:ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用DESC 关键字。
INSERT INTO:语法:INSERT INTO 表名称V ALUES (值1, 值2,....);INSERT INTO table_name (列1, 列2,...) V ALUES (值1, 值2,....)释义:INSERT INTO 语句用于向表格中插入新的行。
UPDATE:语法:UPDATE 表名称SET 列名称= 新值WHERE 列名称= 某值释义:Update 语句用于修改表中的数据。
DELETE:语法:DELETE FROM 表名称WHERE 列名称= 值释义:DELETE 语句用于删除表中的行。
TOP:语法:SELECT TOP number|percent column_name(s)FROM table_name释义:TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
并非所有的数据库系统都支持TOP 子句。
sql 语言的基本语法SQL(结构化查询语言)是用于管理和操作关系数据库的标准编程语言。
以下是 SQL 语言的一些基本语法:1. 查询数据:`SELECT` 用于查询数据。
例如:`SELECT FROM 表名;`2. 过滤数据:`WHERE` 用于过滤记录。
例如:`SELECT FROM 表名 WHERE 条件;`3. 排序数据:`ORDER BY` 用于对结果集进行排序。
例如:`SELECT FROM 表名 ORDER BY 列名 ASC/DESC;`4. 聚合函数:`COUNT()`、`SUM()`、`AVG()`、`MAX()` 和`MIN()` 用于聚合数据。
例如:`SELECT COUNT() FROM 表名 WHERE 条件;`5. 分组数据:`GROUP BY` 用于按某一列或多列对结果集进行分组。
例如:`SELECT 列名, COUNT() FROM 表名 GROUP BY 列名;` 6. 连接表:`JOIN` 用于连接两个或多个表。
例如:`SELECT FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名;` 7. 插入数据:`INSERT INTO` 用于向表中插入新记录。
例如:`INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);`8. 更新数据:`UPDATE` 用于修改表中的数据。
例如:`UPDATE 表名 SET 列1 = 值1 WHERE 条件;`9. 删除数据:`DELETE FROM` 用于删除表中的记录。
例如:`DELETE FROM 表名 WHERE 条件;`10. 创建表:`CREATE TABLE` 用于创建新表。
例如:`CREATE TABLE 表名 (列1 数据类型, 列2 数据类型);` 11. 删除表:`DROP TABLE` 用于删除表。
例如:`DROP TABLE 表名;`12. 创建索引:`CREATE INDEX` 用于在表中创建索引。
SQL基本语句来自:SQL编程技巧掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。
练掌握SQL是数据库用户的宝贵财富。
在本文中,我们将引导你掌握四条最基本的数据库操作语句—SQL的核心功能—来依次介绍比较操作符、选择谓项以及三值逻辑。
当你完成这些学习后,显然你已经开始算是精通SQL了。
在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。
DDL语句对数据库对象如表、列和视进行定义。
它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。
这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。
SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。
由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。
在图1中我们给出了一个名为EMPLOYEES的表。
其中的每一行对应一个特定的雇员记录。
请熟悉这张表,我们在后面的例子中将要用到它。
INSERT语句用户可以用INSERT语句将一行记录插入到指定的一个表中。
例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:INSERT INTO EMPLOYEES VALUES ('Smith','John','1980-06-10', 'Los Angles',16,45000);通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。
这些列按照我们创建表时定义的顺序排列。
在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。
我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。
如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。
如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。
这是因为SQL提供对事务的支持。
一次事务将数据库从一种一致性转移到另一种一致性。
如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。
回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。
为了增加可读性而在数字间插入逗号将会引起错误。
记住,在SQL中逗号是元素的分隔符。
同样要注意输入文字值时要使用单引号。
双引号用来封装限界标识符。
对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。
当然,2000年临近,请你最好还是使用四位来表示年份。
既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:INSERT INTO EMPLOYEES VALUES ('Bunyan','Paul','1970-07-04', 'Boston',12,70000);INSERT INTO EMPLOYEES VALUES ('John','Adams','1992-01-21', 'Boston',20,100000);INSERT INTO EMPLOYEES VALUES ('Smith','Pocahontas','1976-04-06', 'Los Angles',12,100000);INSERT INTO EMPLOYEES VALUES ('Smith','Bessie','1940-05-02', 'Boston',5,200000);INSERT INTO EMPLOYEES VALUES ('Jones','Davy','1970-10-10', 'Boston',8,45000);INSERT INTO EMPLOYEES VALUES ('Jones','Indiana','1992-02-01', 'Chicago',NULL,NULL);在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。
NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。
现在我们只需认为NULL表示一种未知的值。
有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。
除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:INSERT INTO EMPLOYEES( FIRST_NAME, LAST_NAME, HIRE_DATE, BRANCH_OFFICE)VALUE( 'Indiana','Jones', '1992-02-01','Indianapolis');这样,我们先在表名之后列出一系列列名。
未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。
请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。
如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。
让我们来看一看上述INSERT语句的语法图:INSERT INTO table [(column { ,column})]VALUES (columnvalue [{,columnvalue}]);和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。
VALUE子句和可选的列名列表中必须使用圆括号。
SELECT语句SELECT语句可以从一个或多个表中选取特定的行和列。
因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。
实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。
SELECT语句的结果通常是生成另外一个表。
在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。
在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。
也可以结合其他SQL语句来将结果放到一个已知名称的表中。
SELECT语句功能强大。
虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。
SELECT语句最简单的语法如下:SELECT columns FROM tables;当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。
这就是实现关系投影运算的一个形式。
让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。
而我们在图2和图3中给出了查询的实际结果。
我们将在其他的例子中使用这些结果)。
假设你想查看雇员工作部门的列表。
那下面就是你所需要编写的SQL查询:SELECT BRANCH_OFFICE FROM EMPLOYEES;以上SELECT语句的执行将产生如图2中表2所示的结果。
由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。
注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。
要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:SELECT DISTINCT BRANCH_OFFICE FROM EMPLOYEES;这次查询的结果如表3所示。
现在已经消除了重复的行,但结果并不是按照顺序排列的。
如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:SELECT DISTINCT BRANCH_OFFICE FROM EMPLOYEESORDER BY BRANCH_OFFICE ASC;这一查询的结果如表4所示。
请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。
为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。
列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。
如果你希望以降序排列,那么可以用关键字DESC。
同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。
假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。
除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。
以下是你将要用到的语句:SELECT BRANCH_OFFICE, FIRST_NAME, LAST_NAME,SALARY, HIRE_DATE FROM EMPLOYEESORDER BY SALARY DESC,HIRE_DATE DESC;这里我们进行了多列的选择和排序。
排序的优先级由语句中的列名顺序所决定。
SQL将先对列出的第一个列进行排序。
如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。
这次查询的结果如表5所示。
将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:SELECT * FROM EMPLOYEES;这次查询返回整个EMPLOYEES表,如表1所示。
下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。
):SELECT [DISTINCT](column [{, columns}]) | * FROM table [ {, table}][ORDER BY column [ASC] | DESC[ {, column [ASC] | DESC }]];定义选择标准在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。