SQL数据库常用语法都有哪些?

SQL数据库常用语法都有哪些?,第1张

掌握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 EMPLOYEES

ORDER 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 EMPLOYEES

ORDER 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语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates]

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones'

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于 <>

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY >50000

1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 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 only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 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 on tabname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的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%’ (所有包含‘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 table1[separator] 11、说明:几个高级查询运算词 A: UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left outer join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join: 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 select语句:[()表示空格 以下表的名称以 表1 为例] 1,select * from 表的名称[表1] 意思是:从表1中查询它的全部内容。 其中:*表示全部内容。如果不查询表1中的全部内容,那么查询什么就把什么发在*的位置上。例如: select name from 表1 其中的name就是要查询的一项内容。 如果要查询的内容是多项那么用逗号隔开,例如: select name,age from 表1 2,select top 一个数字 * from 表1 意思是:从表1中查询前 X 项的全部内容。 *可以用表1中的内容表示。意思是:从表1中查询前 X 项某一项的内容。而不是全部内容。 3,select * from 表1 where 表中某一项满足的条件。例如: Select * from 表1 where submit_date<#2003-11-1#意思是: 从表1中查询满足sumit_date在2003-11-1之前的全部内容。 select * from 表1 where 表中某一项满足的条件 and 另一项内容满足的条件。例如: Select * from 表1 where submit_date<#2003-11-1# and real_name=“建波” 。意思是: 从表1中查询满足sumit_date在2003-11-1之前和real_name="建波"的全部内容 4,select * from 表1 where 表1中某一项满足的条件 like "*关键字*"。例如: select * form 表1 where real_name like "*勇*"。意思是: 从表1中查询real_name中有 关键字 “勇”的全部内容。 5,select * from 表1 order by order 某一项内容 升降顺序。例如: Select * from 表1 order by real_name asc 升序排列 Select * from 表1 order by real_name desc 降序排列 意思是 从表1中按照 real_name 的升降顺序查询 6,Select * from 表1 order by real_name desc,submit_date asc 如果有按多个字段排序,中间用逗号隔开 7,查询满足条件的记录的总数 select count (*) as total from 表1 where 某一项内容满足的条件 (计数) (总数) Select count (*) as total from 表1 where submit_date<#2003-11-1#。意思是: 从表1中查询满足sumit_date在2003-11-1之前的总数 8,select sum (某一项) as total 某一项,average(某一项) as average 某一项 from 表1 group by class。例如: Select sum (grade) as total_grade,average(grade) as average_grade from 表1 group by class。意思是: 从表1中查询这个班 grade 的总数 和 这个班 grade 的平均数 Insert语句 主要的功能是向数据库添加新的信息 语法是:insert into 表1 (字段1,字段2,……) value (字段1德值,字段2的值,……) 例如: (1)插入user_name字段: Insert into users(user_name)values("wuyuanzhi") (2)只插入user_name和real_name字段 Insert into users (user_name,real_name) values("yuanzhi","远志") 说明:user_name 是主键,必须插入值,而且还不能跟原来的用户名 重复。 (3)只插入user_name 和 submit_date 字段 insert into users (user_name,submit_date) value ("yuanzhi",#2007-01-01#) (4)假如在users表中增加一个年龄字段age,为数字类型,则为:insert into users (user_name,age) value ("yuanzhi",23) (5)在users表中增加一条完整的记录: insert into users (user_name,password,real_name,tel,email,submit-date) value("yuanzhi","2468912340","远 志","15001016610","wuyuanzhi226@163.com",#2007-01-02#) Delete 语句 作用是:可以删去表中无用德记录 语法:delete from 表1 [where 条件] 说明:1,where 条件与select中的用法是一样的,凡是符合条件的记录都会被删除,如果没有符合条件的记录则不删除. 2,如果省略where条件,将删除所有数据。 下面是常用的例子: (1)删除user_name为"yuanzhi"的用户 delete from 表1 where user_name="yuanzhi" (2)删除2003年1月1日前注册,并real_name为 "李亚" 的用户 Delete from 表1 where submit_date<#2003-01-01# and real_name="李亚" (3)删除表中所有的数据 Delete from 表1 Update 语句 在实际生活中,数据信息在不断变化,例如用户表中,电话可能会经常变化,在这个时候就可以使用update语句来实现更新数据的功能。 语法:update 数据库名 set 字段1=字段值1,字段2=字段2,……[where 条件] 例如(1)修改user_name为 "yuanzhi" 的用户的电话和e-mail地址。 update 表1 set tel="15001016610",e-mail="wuyuanzhi226@163.com" where user_name="yuanzhi" (2)将所有2003年一月一日前注册日期统一更改为2003年一月一日。 update users set submit_date=#2003-01-01# where submit_date<#2003-01-01# (3)假如有年龄字段age,将所有的人的年龄增加10岁 update 表1 set age=age+10这些都是常用的,找你有用的慢慢看哈

下面是一些常用的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 * 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("别名") 获取统的计值,其它函数运用同上。

(5) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 数据表名称 (永久性删除一个数据表)

4. 记录集对象的方法:

rs.movenext              将记录指针从当前的位置向下移一行

rs.moveprevious          将记录指针从当前的位置向上移一行

rs.movefirst             将记录指针移到数据表第一行

rs.movelast              将记录指针移到数据表最后一行

rs.absoluteposition=N    将记录指针移到数据表第N行

rs.absolutepage=N        将记录指针移到第N页的第一行

rs.pagesize=N            设置每页为N条记录

rs.pagecount             根据 pagesize 的设置返回总页数

rs.recordcount           返回记录总数

rs.bof                   返回记录指针是否超出数据表首端,true表示是,false为否

rs.eof                   返回记录指针是否超出数据表末端,true表示是,false为否

rs.delete                删除当前记录,但记录指针不会向下移动

rs.addnew                添加记录到数据表末端

rs.update                更新数据表记录

参考资料

SQL常用命令.csdn[引用时间2017-12-30]


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9433349.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存