下面就是小编给大家带来的掌握SQL四条最基本的数据操作语句MySQL综合,本文共9篇,希望大家喜欢,可以帮助到有需要的朋友!本文原稿由网友“小保保小倒霉蛋子”提供。
篇1:掌握SQL四条最基本的数据操作语句MySQL综合
掌握sql四条最基本的数据操作语句:insert,select,update和delete,
练掌握sql是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句—sql的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通sql了。
在我们开始之前,先使用create table语句来创建一个表(如图1所示)。ddl语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为ddl语句并不处理数据库中实际的数据。这些工作由另一类sql语句—数据操作语言(dml)语句进行处理。
sql中有四种基本的dml操作:insert,select,update和delete。由于这是大多数sql用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为employees的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。
连接查询
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型
数据库管理系统的一个标志。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。
连接可以在select 语句的from子句或where子句中建立,似是而非在from子句中指出连接时有助于
将连接操作与where子句中的搜索条件区分开来。所以,在transact-sql中推荐使用这种方法。
sql-92标准所定义的from子句的连接语法格式为:
from join_table join_type join_table
[on (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一
个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(inner join)使用比
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(left outer join或left join)、右外连接(right outer join或right join)
和全外连接(full outer join或full join)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(cross join)没有where 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的on (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑
运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接
连接。例如:
select p1.pub_id,p2.pub_id,p1.pr_info
from pub_info as p1 inner join pub_info as p2
on datalength(p1.pr_info)=datalength(p2.pr_info)
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分
三种:
关 键 字:MYSQL
篇2:掌握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的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。
连接查询
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型
数据库管理系统的一个标志。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。
连接可以在select 语句的from子句或where子句中建立,似是而非在from子句中指出连接时有助于
将连接操作与where子句中的搜索条件区分开来。所以,在transact-sql中推荐使用这种方法。
sql-92标准所定义的from子句的连接语法格式为:
from join_table join_type join_table
[on (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一
个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(inner join)使用比
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(left outer join或left join)、右外连接(right outer join或right join)
和全外连接(full outer join或full join)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(cross join)没有where 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的on (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑
运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接
连接。例如:
select p1.pub_id,p2.pub_id,p1.pr_info
from pub_info as p1 inner join pub_info as p2
on datalength(p1.pr_info)=datalength(p2.pr_info)
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分
三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接
表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些
运算符包括>、>=、<=、<、!>、!<和>。 和>
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询
结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
select *
from authors as a inner join publishers as p
on a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
select a.*,p.pub_id,p.pub_name,p.country
from authors as a inner join publishers as p
on a.city=p.city
(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( where 搜索条件或 having 条件)和连接条件
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
如下面使用左外连接将论坛内容和作者信息连接起来:
select a.*,b.* from luntan left join usertable as b
on a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
select a.*,b.*
from city as a full outer join user as b
on a.username=b.username
(三)交叉连接
交叉连接不带where 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
于6*8=48行。
select type,pub_name
from titles cross join publishers
order by type
union运算符可以将两个或两个以上上select语句的查询结果集合合并成一个结果集合显示,即执行联
合查询。union的语法格式为:
select_statement
union [all] selectstatement
[union [all] selectstatement][…n]
其中selectstatement为待联合的select查询语句。
all选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一
行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用union 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的union语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
查询1 union (查询2 union 查询3)
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),但是在系统中可以进行定义,以接受其他的格式。当然,临近,请你最好还是使用四位来表示年份。
既然你已经理解了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,00);
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;
这一查询将返回年薪高于$50,000.00的职员(参见表7)。
逻辑连接符
有时我们需要定义一条不止一种断言的select语句。举例来说,如果你仅仅想查看davy jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个where子句,用户可以使用逻辑连接符and,or和not。为了只得到职员davy jones的记录,用户可以输入如下语句:
select * from employees
where last_name = 'jones' and first_name = 'davy';
在本例中,我们通过逻辑连接符and将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个select语句来使得当其中任何一项成立就满足条件时,可以使用or连接符:
select * from employees
where last_name = 'jones' or last_name = 'smith';
有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:
select * from employees
where not(branch_office = 'boston');
关键字not后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在boston,括号内的表达式返回true,但是not操作符将该值取反,所以该行将不被选中。
断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:
select * from employees
where (last_name = 'jones'
and first_name = 'indiana')
or (last_name = 'smith'
and first_name = 'bessie');
sql沿用数学上标准的表达式求值的约定—圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。
篇3:掌握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的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。
连接查询
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。
连接可以在select 语句的from子句或where子句中建立,似是而非在from子句中指出连接时有助于将连接操作与where子句中的搜索条件区分开来。所以,在transact-sql中推荐使用这种方法。
sql-92标准所定义的from子句的连接语法格式为:
from join_table join_type join_table
[on (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(inner join)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(left outer join或left join)、右外连接(right outer join或right join) 和全外连接(full outer join或full join)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(cross join)没有where 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的on (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:
select p1.pub_id,p2.pub_id,p1.pr_info
from pub_info as p1 inner join pub_info as p2
on datalength(p1.pr_info)=datalength(p2.pr_info)
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值,
内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和>。和>
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
select *
from authors as a inner join publishers as p
on a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
select a.*,p.pub_id,p.pub_name,p.country
from authors as a inner join publishers as p
on a.city=p.city
(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( where 搜索条件或 having 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
如下面使用左外连接将论坛内容和作者信息连接起来:
select a.*,b.* from luntan left join usertable as b
on a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
select a.*,b.*
from city as a full outer join user as b
on a.username=b.username
(三)交叉连接
交叉连接不带where 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等
于6*8=48行。
select type,pub_name
from titles cross join publishers
order by type
union运算符可以将两个或两个以上上select语句的查询结果集合合并成一个结果集合显示,即执行联合查询。union的语法格式为:
select_statement
union [all] selectstatement
[union [all] selectstatement][…n]
其中selectstatement为待联合的select查询语句。
all选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
[1] [2] [3] 下一页
篇4:sql数据添加语句
SQL提供了两种用于向数据库关系表中添加新行的方法,它们是单行INSERT语句和多行INSERT语句,下面我们简单地介绍这两种语句的功能和使用方法。
(1)单行INSERT语句
单行INSERT语句用于向一关系表中添加一行新数据。其使用格式如下:
INSERT INTO <表名>(列名列表)表名>
VALUS (列值列表)
其中,列值列表中的各数值顺序与列名列表中的各列名相互对应。
(2)多行INSERT语句
多行INSERT语句用于向一关系表中添加若干行新数据,其使用格式如下:
INSERT INTO <表名>(列名列表)表名>
(SELECT语句)
例9:将订单表中1月1日前的订单编号、日期和订购数量保存到另一关系表OLDORDERS中,
INSERT INTO OLDORDERS
(ORDER_NUM,ORDER_DATE,AMOUT)
SELECT ORDER_NUM,ORDER_DATE,AMOUNT
FROM ORDERS
WHERE ORDER_DATE<“01-JAN-99”
这里需要说明的是,在多行INSERT语句中,其数据来源是一个SELECT查询语句的结果。即多行INSERT语句与数据库内容的复制功能类似。其中SELECT查询语句的结果中列的顺序与列名列表中各列名相互对应。
参考资料:sql语言教程 Sql语言基础
返回“数据库基础知识ABC”目录
篇5:SQL数据操作基础(中级)10
操作日期和时间
日期和时间函数对建立一个站点是非常有用的,站点的主人往往对一个表中的数据何时被更新感兴趣。通过日期和时间函数,你可以在毫秒级跟踪一个表的改变。
返回当前日期和时间
通过函数GETDATE,你可以获得当前的日期和时间。例如,语句SELECT GETDATE返回如下的结果:
……………………………..
NOV 30 3:29AM
(1 row(s) affected)
显然,如果你将来使用这个函数,你得到的日期将比这个时间晚,或者梗早。
函数GETDATE()可以用来作为DATEDIME()型字段的缺省值。这对插入记录时保存当时的时间是有用的。例如,假设有一个表用来保存你站点上的活动日志。每当有一个访问者访问到你的站点时,就在表中添加一条新记录,记下访问者的名字,活动,和进行访问的时间。要建立一个表,其中的记录包含有当前的日期和时间,可以添加一个DATETIME型字段,指定其缺省值为函数GETDATE()的返回值,就象这样:
CREATE TABLE site_log (
username VARCHAR(40),
useractivity VARCHAR(100),
entrydate DATETIME DEFAULT GETDATE())
转换日期和时间
你也许已经注意到,在上一节的例子中,函数GETDATE()的返回值在显示时只显示到秒。实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒)。
要得到不同格式的日期和时间,你需要使用函数CONVERT()。例如,当下面的这个语句执行时,显示的时间将包括毫秒:
SELECT CONVERT(VARCHAR(30),GETDATE(),9)
注意例子中数字9的使用。这个数字指明了在显示日期和时间时使用哪种日期和时间格式。当这个语句执行时,将显示如下的日期和时间:
…………………………………..
Nov 30 1997 3:29:55:170AM
(1 row(s) affected)
在函数CONVERT()中你可以使用许多种不同风格的日期和时间格式。表11.1显示了所有的格式。
表11.1 日期和时间的类型
类型值 标准 输出
0 Default mon dd yyyy hh:miAM
1 USA mm/dd/yy
2 ANSI yy.mm.dd
3 British/French dd/mm/yy
4 German dd.mm.yy
5 Italian dd-mm-yy
6 - dd mon yy
7 - mon dd,yy
8 - hh:mi:ss
Default + milliseconds--mon dd yyyy
hh:mi:ss:mmmAM(or )
10 USA mm-dd-yy
11 JAPAN yy/mm/dd
12 ISO yymmdd
13 Europe Default + milliseconds--dd mon yyyy
hh:mi:ss:mmm(24h)
14 - hh:mi:ss:mmm(24h)
类型0,9,和13总是返回四位的年。对其它类型,要显示世纪,把style值加上100。类型13和14返回24小时时钟的时间。类型0,7,和13返回的月份用三位字符表示(用Nov代表November).
对表11.1中所列的每一种格式,你可以把类型值加上100来显示有世纪的年(例如,将显示为)。例如,要按日本标准显示日期,包括世纪,你应使用如下的语句:
SELECT CONVERT(VARCHAR(30),GETDATE(),111)
在这个例子中,函数CONVERT()把日期格式进行转换,显示为1997/11/30
抽取日期和时间
在许多情况下,你也许只想得到日期和时间的一部分,而不是完整的日期和时间。例如,假设你想列出你的站点目录中每个站点被查询的月份。这时你不希望完整的日期和时间把网页弄乱。为了抽取日期的特定部分,你可以使用函数DATEPART(),象这样:
SELECT site_name ‘Site Name’,
DATEPART(mm,site_entrydate) ‘Month Posted’ FROM site_directory
函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个变量是实际的数据。在这个例子中,函数DATEPART()抽取月份,因为mm代表月份。下面是这个SELECT 语句的输出结果:
Site Name Month Posted
………………………………………………………………
Yahoo 2
Microsoft 5
Magicw3 5
(3 row(s) affected)
Month Posted列显示了每个站点被查询的月份。函数DATEPART()的返回值是一个整数。你可以用这个函数抽取日期的各个不同部分,如表11.2所示。
表11.2 日期的各部分及其简写
日期部分 简写 值
year yy 1753--9999
quarter qq 1--4
month mm 1--12
day of year dy 1--366
day dd 1--31
week wk 1--53
weekday dw 1--7(Sunday--Saturday)
hour hh 0--23
minute mi 0--59
second ss 0--59
milisecond ms 0--999
当你需要进行日期和时间的比较时,使用函数DATEPART()返回整数是有用的,
但是,上例中的查询结果(2,5)不是十分易读。要以更易读的格式得到部分的日期和时间,你可以使用函数DATENAME(),如下例所示:
SELECT site_name ‘Site Name’
DATENAME(mm,site_entrydate) ‘Month Posted’
FROM site_directory
函数DATENAME()和函数DATEPART()接收同样的参数。但是,它的返回值是一个字符串,而不是一个整数。下面是上例该用DATENAME()得到的结果:
Site Name Month Postec
………………………………………………………………….
Yahoo February
Microsoft June
Magicw3 June
(3 row(s) affected)
你也可以用函数DATENAE()来抽取一个星期中的某一天。下面的这个例子同时抽取一周中的某一天和日期中的月份:
SELECT site_name ‘Site Name’,
DATENAME(dw,site_entrydate)+ ‘-’ + DATENAME(mm,site_entrydate)
‘Day and Month Posted’ FORM. site_directory
这个例子执行时,将返回如下的结果:
Site Name Day and Month Posted
………………………………………………………………………
Yahoo Friday - February
Microsoft Tuesday - June
Magicw3 Monday - June
(3 row(s) affected)
返回日期和时间范围
当你分析表中的数据时,你也许希望取出某个特定时间的数据。你也许对特定的某一天中DD比如说年12月25日DD访问者在你站点上的活动感兴趣。要取出这种类型的数据,你也许会试图使用这样的SELECT语句:
SELECT * FROM weblog WHERE entrydate=”12/25/20000”
不要这样做。这个SELECT语句不会返回正确的记录DD它将只返回日期和时间是12/25/2000 12:00:00:000AM的记录。换句话说,只有刚好在午夜零点输入的记录才被返回。
注意:
在本节的讨论中,假设字段entrydate是DATETIME型,而不是SMALLDATETIME型。本节的讨论对SMALLDATETIME型字段也是适用的,不过SMALLDATETIME型字段只能精确到秒。
问题是SQL Sever将用完整的日期和时间代替部分日期和时间。例如,当你输入一个日期,但不输入时间时,SQL Sever将加上缺省的时间“12:00:00:000AM”。当你输入一个时间,但不输入日期时,SQL Sever将加上缺省的日期“Jan 1 1900”。
要返回正确的记录,你需要适用日期和时间范围。有不止一种途径可以做到这一点。例如,下面的这个SELECT 语句将能返回正确的记录:
SELECT * FROM weblog
WHERE entrydate>=”12/25/2000” AND entrydate<”12/26/2000”
这个语句可以完成任务,因为它选取的是表中的日期和时间大于等于12/25/2000 12:00:00:000AM并小于12/26/2000 12:00:00:000AM的记录。换句话说,它将正确地返回2000年圣诞节这一天输入的每一条记录。
另一种方法是,你可以使用LIKE来返回正确的记录。通过在日期表达式中包含通配符“%”,你可以匹配一个特定日期的所有时间。这里有一个例子:
SELECT * FROM weblog WHERE entrydate LIKE ‘Dec 25 2000%’
这个语句可以匹配正确的记录。因为通配符“%”代表了任何时间。
使用这两种匹配日期和时间范围的函数,你可以选择某个月,某一天,某一年,某个小时,某一分钟,某一秒,甚至某一毫秒内输入的记录。但是,如果你使用LIKE 来匹配秒或毫秒,你首先需要使用函数CONVERT()把日期和时间转换为更精确的格式(参见前面“转换日期和时间”一节)。
比较日期和时间
最后,还有两个日期和时间函数对根据日期和时间取出记录是有用的。使用函数DATEADD()和DATEDIFF(),你可以比较日期的早晚。例如,下面的SELECT语句将显示表中的每一条记录已经输入了多少个小时:
SELECT entrydate ‘Time Entered’
DATEDIFF(hh,entrydate,GETDATE()) ‘Hours Ago’ FROM weblog
如果当前时间是2000年11月30号下午6点15分,则会返回如下的结果:
Time Entered Hours Ago
…………………………………………………..
Dec 30 2000 4:09PM 2
Dec 30 2000 4:13PM 2
Dec 1 2000 4:09PM 698
(3 row(s) affected)
函数DADEDIFF()的参数是三个变量。第个变量指定日期的某一部分。在这个例子中,是按小时对日期进行比较,(要了解日期各部分的详细内容,请参考表11.2)在日期2000年11月1日和2000年11月30日的指定时间之间有689个小时。另外两个参数是要进行比较的时间。为了返回一个正数,较早的时间应该先给。
函数DATEADD()把两个日期相加。当你需要计算截止日期这一类的数据时,这个函数
篇6:精心SQL常用操作语句篇
更多SQL专业知识教程请点击:SQL学习专题
这篇文章主要介绍了MySql常用操作SQL语句汇总,本文讲解了增加、删除、查询、修改等常用SQL语句实例,需要的朋友可以参考下
MySQL的常见操作在这里先做一下总结,已经整合到代码里面,经过检验无误,
代码如下:
/*创建一个数据库*/
create database xuning_test;
/*说明当时使用数据库对象*/
use xuning_test;
/*向数据库中添加表并且定义表的结构*/
create table person(
id int not null,
name varchar(16) not null,
sex varchar(16) not null,
age int not null,
address varchar(128) not null,
remark varchar(512) not null
);
/*向数据库的表中插入数据*/
insert into person value
(1,‘name_1‘,‘men‘,99,‘beijing‘,‘This is a frindsheep boy‘),
(2,‘name_2‘,‘men‘,88,‘shanghai‘,‘ok great‘),
(1,‘name_3‘,‘man‘,77,‘guangzhou‘,‘This is lickly‘),
(1,‘name_4‘,‘men‘,66,‘beijing‘,‘This is a frindsheep boy‘),
(1,‘name_5‘,‘men‘,55,‘beijing‘,‘you dont going to shool‘),
(1,‘name_6‘,‘man‘,44,‘beijing‘,‘This is a frindsheep boy‘),
(1,‘name_7‘,‘men‘,33,‘beijing‘,‘This is a frindsheep boy‘),
(1,‘name_8‘,‘man‘,22,‘beijing‘,‘‘),
(1,‘name_9‘,‘men‘,11,‘beijing‘,‘This is a frindsheep boy‘)
;
/*查询时否成功插入*/
select * from person;
/*下面是多种查询方式*/
/*根据列的名称属性值*/
select name from person;
/*添加条件-根据性别*/
select name from person where sex = ‘men‘;
/*也可以用比较符作为条件--一定逗号隔开*/
select name,address from person where age >50;
/*看做对象去使用数据库和表的关系=---双表关联--对象关系一定要明确*/
select xuning_test.person.name, xuning_test.person.id, xuning_test.person.age, xuning_test.person.address
from xuning_test.person, test1.test_xuning
where xuning_test.person.id = test1.test_xuning.id
;
/*使用表的别名进行查询*/
use xuning_test;
select c.name,sex from person as c where c.age >40 and c.address=‘beijing‘;
更多SQL专业知识教程请点击:SQL学习专题
篇7:怎样掌握SQL Server中的数据查询综合教程
SQL(结构化查询语言)就是负责与ANSI维护的数据库交互的标准,最新的版本是SQL-99,还有一个新标准SQL-200n尚处于制定过程中。大多数的数据库都至少遵守ANSI-92标准的部分子集。不过,目前对最新标准的有效性还存在一些争论。专有数据库制造商根据这些标准开发自己的产品,同时制定出自己特有的数据库存储操作新概念。几乎各种不同的数据库都包含了自己特有的语法集合,只是通常很类似ANSI标准。在大多数情况下,尽管有一些数据库实例基于特定的扩展语法会因数据库的不同而产生不同的结果,但总的说来,这些新加的语法不过是对原有标准的扩充。如果数据库操作并没有得到你希望的结果,那么你不妨事先读一读数据库制造商提供的产品说明。
假如到目前为止你头回遭遇SQL语言,那么你怎么也得先理解一些基本的SQL概念。我尽量把这些基本知识阐述得简明扼要,如果你对那些数据库术语还能忍受,你尽可跳到下一节,此外你还可以把自己的问题提交给以下的讨论区。
笼统地说,“SQL数据库”其实就是关系型数据库管理系统(RDMS)通俗的叫法。对某些系统来说,“数据库”也指一组数据表、数据以及相互区分但结构类似的配置信息。在这种情况下,每一SQL数据库的安装都可能由若干数据库组成。在有些系统上,这种数据库则指的是表空间。
数据表是一种包含多行数据的数据库构造,这种数据库构造由命名的列组成。通常数据表构造为包含关系信息,同一数据库或表空间以内可以创建若干数据表。
表内的列保存某一种类型的数据而且应根据其保存数据的内容得以命名。例如,被称为“LastName”的列就应该在每一行包含姓氏条目。正是这一前提的存在才能让关系数据库查询返回一致的结果。
字段(field)指的是某一行某一列对应的数据(或保存数据的地方)。另外,数据集合(data set)则指的是多行多列的数据,而且数据集合通常说明你的数据库或数据表内的全部数据。结果集合(result set)就是从数据库查询返回的数据;它能够描述从单一字段到数据库内全部数据这一范围内的全部信息。
数据库查询就是发送给数据库的SQL指令,这些指令向数据库请求某种施加在数据集合或数据库上的功能。
现在我们就来看看基本的数据库查询,这些查询主要涉及到对数据库内数据的操作。在本文中,所有的例子都采用了标准SQL语言,而且这些基本功能可以转换为应用在几乎各种环境下。
数据查询类型
SQL语言中的数据查询分为4种基本类型:
SELECT:这条语句要求数据库返回指定结果的数据集合;你可以用这一语句检索数据库中保存的信息。
INSERT:这条语句用来给数据表增加新一行数据。
DELETE:该语句从你的数据库中删除若干行数据。
UPDATE:该语句修改数据库内的现有数据。
以上的这些语句都有各种各样的限定词和函数供你用来定义有关的数据集合,同时控制查询返回的结果集合。SELECT语句的选项最多。有许多种组合SELECT的查询选项,例如JOIN和UNION等。不过就我们目前来说,本文主要还是关注基本用途。
用SELECT语句检索保存的信息
为了获得数据库中保存的信息就必须采用SELECT语句。其基本功能限制在针对单一数据表操作,当然,其他范围的构造也是有的。为了返回特定列所对应的所有数据行,你可以使用以下语句:
SELECT column1, column2 FROM table_name;
另外,使用通配符“*”可以从表中选出所有的列:SELECT * FROM table_name;
你要愿意自己编码分析以上返回的结果当然也没问题,不过你完全可以采用方便的WHERE子句限制返回的结果集合,该子句可以让你为选择数据定义某些条件。以下查询就会返回“column1”数值等于3的所以数据行:SELECT * FROM table_name WHERE column1 = 3;
除了“=”(等于)条件之外你还可以用到下列条件运算符:
=
关 键 字:SQLServer
篇8:六道经典SQL语句题完全掌握SQL语句
六道经典SQL语句题完全掌握SQL语句
学生表S (SNO 学号, Sname 姓名, Class 班级, Shigh 身高)
课程表C(CNO 课程号, CName 课程名, CPreNO 预修课程编码)
成绩表SC(CNO 课程号, SNO 学号, SCgrade 成绩)
1、体育生选拔,要求身高在170cm以上,考试不及格课程在3门以下(不包括3门)平均成绩在60分以上,
学号 姓名 身高 平均成绩
2、所有预选课程都已经合格的学生(预选课程不存在嵌套循环的情况)。
3、同时选修了‘离散数学’与‘组成原理’的,且高等数学成绩大于80分的。
学号 姓名 离散数学 组成原理 高等数学
分数 分数 分数
4、列出各门课程前三名(成绩相同,学号小的排名在前)
第一名 第二名 第三名
课程名 班级:姓名:成绩 班级:姓名:成绩 班级:姓名:成绩
5、统计各科的学习情况。
课程名 60以下 [60,70) [70,85) [85,100)
6、按班级统计各科平均成绩。
课程名 第一 第二 第三
班级:平均成绩 班级:平均成绩 班级:平均成绩
7、按班级统计各科平均成绩后,第一名3分,第二名2分,第三名1分,其他计0.5分(可以并列名次),最后给班级排名。(最后成绩一样,按班级序号小的排前)
第一名 第二名 第三名
[sql]
--第1题
select td_b.SNO 学号, td_b.SNAME 姓名, td_b.SHIGH 身高, td_a.avgGrade平均成绩 from
(select S.SNO,avg(SCgrade) as avgGrade from S,SC
where
S.SNO = SC.SNO and
S.Shigh>170
group by S.SNO
having
avg(SCgrade)>60) td_a
left join(
select * from S where not exists (
select a.sno from S a, SC b where
a.sno = b.sno
and b.scgrade<60
group by a.sno
having count(*) < 3)
) td_b
on td_a.SNO = td_b.SNO
--第2题
--第3题
select distinct S1.SNO as 学号, S1.SNAME as 姓名,
(select SC.SCgrade from SC,C where SC.CNO=C.CNO and C.CNAME='离散数学' and SC.SNO = SC1.SNO) as 离散数学,
(select SC.SCgrade from SC,C where SC.CNO=C.CNO and C.CNAME='组成原理' and SC.SNO = SC1.SNO) as 组成原理,
(select SC.SCgrade from SC,C where SC.CNO=C.CNO and C.CNAME='高等数学' and SC.SNO = SC1.SNO) as 高等数学
from SC SC1, S S1
where
SC1.SNO = S1.SNO
and S1.SNO in
(
select S.SNO from S,C,SC
where
S.SNO = SC.SNO and
SC.CNO = C.CNO and
C.CNAME='离散数学' and
S.SNO in (select t1.SNO from SC t1, C t2 where t1.CNO=t2.CNO and t2.cname='组成原理') and
S.SNO in (select t3.SNO from SC t3, C t4 where t3.CNO=t4.CNO and t4.Cname='高等数学'and t3.scgrade>80)
)
----另解
select distinct s.sno,s.sname,
(select scgrade from sc left join c on sc.cno=c.cno where c.cname='离散数学' and sc.sno=sc1.sno)“离散数学”,
(select scgrade from sc left join c on sc.cno=c.cno where c.cname='组成原理' and sc.sno=sc1.sno) “组成原理”,
(select scgrade from sc left join c on sc.cno=c.cno where c.cname='高等数学' and sc.sno=sc1.sno) “高等数学”
from s,sc sc1,C
where sc1.sno=s.sno
and s.sno in
(
select sno from sc left join c on sc.cno=c.cno where c.cname='离散数学' intersect
select sno from sc left join c on sc.cno=c.cno where c.cname='组成原理' intersect
select sno from sc left join c on sc.cno=c.cno where c.cname='高等数学' and sc.scgrade>80)
--第4题
select C.CNAME as 课程名,
max(case when ro=1 then '班级:'||td_b.class||' 姓名:'||S.SNAME||' 成绩:'||td_b.SCgrade else null end) as 第一名,
max(case when ro=2 then '班级:'||td_b.class||' 姓名:'||S.SNAME||' 成绩:'||td_b.SCgrade else null end) as 第二名,
max(case when ro=3 then '班级:'||td_b.class||' 姓名:'||S.SNAME||' 成绩:'||td_b.SCgrade else null end) as 第三名
from
(
select td_a.CNO, td_a.SNO, td_a.class, td_a.SCgrade, row_number over(partition by CNO order by SCgrade desc) ro
from
(select CNO, S.SNO, Class, SCgrade
from S inner join SC
on S.SNO = SC.SNO
group by CNO, S.SNO, Class, SCgrade
order by S.SNO)td_a
)td_b , C, S
where td_b.cno = C.CNO and td_b.sno = S.SNO
group by CNAME
--第5题
select c.cname “课程号”,
sum(case when (scgrade<60) then 1 else 0 end) “60分以下”,
sum(case when (scgrade<70 and scgrade>=60) then 1 else 0 end) “[60,70)”,
sum(case when (scgrade<85 and scgrade>=70) then 1 else 0 end) “[70,85)”,
sum(case when (scgrade<=100 and scgrade>=85) then 1 else 0 end) “[85,100]”
from sc,c
where sc.cno=c.cno
group by c.cname
order by c.cname
--第6题
select CNAME 课程名,
max(case when ro=1 then '班级:'||td_b.Class||'平均成绩:'||td_b.K_avg else null end) 第一,
max(case when ro=2 then '班级:'||td_b.Class||'平均成绩:'||td_b.K_avg else null end) 第二,
max(case when ro=3 then '班级:'||td_b.Class||'平均成绩:'||td_b.K_avg else null end) 第三
from
(
select td_a.CNO, td_a.Class, td_a.K_avg, row_number() over(partition by CNO order by K_avg desc)ro
from
(select distinct CNO, Class, avg(SCgrade)K_avg
from S inner join SC
on S.SNO = SC.SNO
group by CNO, class
order by class)td_a
)td_b, C
where td_b.CNO = C.CNO
group by CNAME
order by CNAME
--第7题
----没有max选出来有三行数据(td_e有三行数据),有了max就只有一行数据了正为所有数据
select max(case when rownum=1 then td_d.class else null end) 第一名,
max(case when rownum=2 then td_d.class else null end) 第二名,
max(case when rownum=3 then td_d.class else null end) 第三名
from
(
select td_c.class, sum1+sum2+sum3+sum4 as tscore
from
(
select td_b.class,
sum(case when ro=1 then 3 else 0 end) as sum1,
sum(case when ro=2 then 2 else 0 end) as sum2,
sum(case when ro=3 then 1 else 0 end) as sum3,
sum(case when ro1 and ro2 and ro3 then 0.5 else 0 end) as sum4
from
(
select td_a.CNO, td_a.Class, td_a.K_avg, row_number() over(partition by CNO order by K_avg desc)ro
from
(select distinct CNO, Class, avg(SCgrade)K_avg
from S inner join SC
on S.SNO = SC.SNO
group by CNO, class
order by class)td_a
)td_b
group by td_b.class
order by td_b.class
)td_c
order by tscore desc
)td_d
篇9:SQL语句基础综合教程
SQL语句基础
创建数据库
创建之前判断该数据库是否存在
if exists (select * from sysdatabases where name=’databaseName’)
drop database databaseName
go
Create DATABASE databasename
删除数据库
drop database databasename
备份sql server
--- 创建备份数据的 device
USE master
EXEC 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:go
use 原数据库名
go
select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
创建序列
create sequence SIMON_SEQUENCE
minvalue 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…,)
删除索引:drop index idxname on tabname
注:索引是不可更改的,想更改必须删除重新建。
创建视图
create view viewname as select statement
删除视图:drop view viewname
简单基本的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(“别名”) 获取统计的值,其它函数运用同上。
查询去除重复值:select distinct * from table1
(5) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
(6) 单列求和:
SELECT SUM(字段名) FROM 数据表
编辑本段最新sql语句
查询数据库中含有同一这字段的表:
select name from sysobjects where xtype = ’u’ and id in(select id from syscolumns where name = ’s3’)
根据出生日期可以算出年龄:
select datediff(year,scrq,’2013’) as 年龄 from page_shsjgrgl
根据当前年份自动算出年龄
select datediff(year,csny,cast(YEAR(GETDATE()) as char))
年
select year(djsj) from page_shsjgrgl
月
select month(djsj) from page_shsjgrgl
日
select day(djsj) from page_shsjgrgl
在同一数据库中复制表结构:
select * into a from b where 11
关 键 字:SQL SQL语句