insert语句的语法形式, insert语句的三种写法
各位老铁们,大家好,今天由我来为大家分享insert语句的语法形式,以及 insert语句的三种写法的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
insert和update的区别
UPDATE
UPDATE的功能是更新表中的数据。这的语法和INSERT的第二种用法相似。必须提供表名以及SET表达式,在后面可以加WHERE以限制更新的记录范围。
UPDATE table_anem SET column_name1= value1, column_name2= value2,…
WHERE…;
如下面的语句将users表中id等于123的记录的age改为24
UPDATE users SET age= 24 WHERE id= 123;
同样,可以使用UPDATE更新多个字段的值 UPDATE users SET age= 24, name=‘Mike’ WHERE id= 123;
上面的UPDATE语句通过WHERE指定一个条件,否则,UPDATE将更新表中的所有记录的值。
在使用UPDATE更新记录时,如果被更新的字段的类型和所赋的值不匹配时,MySQL将这个值转换为相应类型的值。如果这个字段是数值类型,而且所赋值超过了这个数据类型的最大范围,那么MySQL就将这个值转换为这个范围最大或最小值。如果字符串太长,MySQL就将多余的字符串截去。如果设置非空字段为空,那么将这个字段设置为它们的默认值,数字的默认值是0,字符串的默认值是空串(不是null,是”")。
有两种情况UPDATE不会对影响表中的数据。
1.当WHERE中的条件在表中没有记录和它匹配时。
2.当我们将同样的值赋给某个字段时,如将字段abc赋为’123′,而abc的原值就是’123′。
和INSERT、REPLACE一样,UPDATE也返回所更新的记录数。但这些记录数并不包括满足WHERE条件的,但却未被更新的记录。如下同的UPDATE语句就未更新任何记录。
UPDATE users SET age= 30 WHERE id= 12;
Query OK, 0 rows affected(0.00 sec)
需要注意的时,如果一个字段的类型是TIMESTAMP,那么这个字段在其它字段更新时自动更新。
在有些时候我们需要得到UPDATE所选择的行数,而不是被更新的行数。我们可以通过一些API来达到这个目的。如MySQL提供的C API提供了一个选项可以得到你想要的记录数。而MySQL的JDBC驱动得到的默认记录数也是匹配的记录数。
UPDATE和REPLACE基本类似,但是它们之间有两点不同。
1. UPDATE在没有匹配记录时什么都不做,而REPLACE在有重复记录时更新,在没有重复记录时插入。
2. UPDATE可以选择性地更新记录的一部分字段。而REPLACE在发现有重复记录时就将这条记录彻底删除,再插入新的记录。也就是说,将所有的字段都更新了。
INSERT和REPLACE
INSERT和REPLACE语句的功能都是向表中插入新的数据。这两条语句的语法类似。它们的主要区别是如何处理重复的数据。
1. INSERT的一般用法
MySQL中的INSERT语句和标准的INSERT不太一样,在标准的SQL语句中,一次插入一条记录的INSERT语句只有一种形式。
INSERT INTO tablename(列名…) VALUES(列值);
而在MySQL中还有另外一种形式。
INSERT INTO tablename SET column_name1= value1, column_name2= value2,…;
第一种方法将列名和列值分开了,在使用时,列名必须和列值的数一致。如下面的语句向users表中插入了一条记录:
INSERT INTO users(id, name, age) VALUES(123,‘姚明’, 25);
第二种方法允许列名和列值成对出现和使用,如下面的语句将产生中样的效果。
INSERT INTO users SET id= 123, name=‘姚明’, age= 25;
如果使用了SET方式,必须至少为一列赋值。如果某一个字段使用了省缺值(如默认或自增值),这两种方法都可以省略这些字段。如id字段上使用了自增值,上面两条语句可以写成如下形式:
INSERT INTO users(name, age) VALUES(‘姚明’,25);
INSERT INTO uses SET name=‘姚明’, age= 25;
MySQL在VALUES上也做了些变化。如果VALUES中什么都不写,那MySQL将使用表中每一列的默认值来插入新记录。
INSERT INTO users() VALUES();
如果表名后什么都不写,就表示向表中所有的字段赋值。使用这种方式,不仅在VALUES中的值要和列数一致,而且顺序不能颠倒。 INSERT INTO users VALUES(123,‘姚明’, 25);
如果将INSERT语句写成如下形式MySQL将会报错。
INSERT INTO users VALUES(‘姚明’,25);
2.使用INSERT插入多条记录
看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语句不就可以插入多条记录了吗!但使用这种方法要增加服务器的负荷,因为,执行每一次 SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的 SQL语法,因此只能在MySQL中使用。
INSERT INTO users(name, age)
VALUES(‘姚明’, 25),(‘比尔.盖茨’, 50),(‘火星人’, 600);
上面的INSERT语句向users表中连续插入了3条记录。值得注意的是,上面的INSERT语句中的VALUES后必须每一条记录的值放到一对(…)中,中间使用”,”分割。假设有一个表table1
CREATE TABLE table1(n INT);
如果要向table1中插入5条记录,下面写法是错误的:
INSERT INTO table1(i) VALUES(1,2,3,4,5);
MySQL将会抛出下面的错误
ERROR 1136: Column count doesn’t match value count at row 1
而正确的写法应该是这样:
INSERT INTO t able1(i) VALUES(1),(2),(3),(4),(5);
当然,这种写法也可以省略列名,这样每一对括号里的值的数目必须一致,而且这个数目必须和列数一致。如:
INSERT INTO t able1 VALUES(1),(2),(3),(4),(5);
3. REPLACE语句
我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误。当然,我们可能想用新记录的值来覆盖原来的记录值。如果使用传统的做法,必须先使用DELETE语句删除原先的记录,然后再使用 INSERT插入新的记录。而在MySQL中为我们提供了一种新的解决方案,这就是REPLACE语句。使用REPLACE插入一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值来替换原来的记录值。
使用REPLACE的最大好处就是可以将DELETE和INSERT合二为一,形成一个原子操作。这样就可以不必考虑在同时使用DELETE和INSERT时添加事务等复杂操作了。
在使用REPLACE时,表中必须有唯一索引,而且这个索引所在的字段不能允许空值,否则REPLACE就和INSERT完全一样的。
在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明在表中并没有重复的记录,如果返回2,说明有一条重复记录,系统自动先调用了 DELETE删除这条记录,然后再记录用INSERT来插入这条记录。如果返回的值大于2,那说明有多个唯一索引,有多条记录被删除和插入。
REPLACE的语法和INSERT非常的相似,如下面的REPLACE语句是插入或更新一条记录。
REPLACE INTO users(id,name,age) VALUES(123,‘赵本山’, 50);
插入多条记录:
REPLACE INTO users(id, name, age)
VALUES(123,‘赵本山’, 50),(134,’Mary’,15);
REPLACE也可以使用SET语句
REPLACE INTO users SET id= 123, name=‘赵本山’, age= 50;
上面曾提到REPLACE可能影响3条以上的记录,这是因为在表中有超过一个的唯一索引。在这种情况下,REPLACE将考虑每一个唯一索引,并对每一个索引对应的重复记录都删除,然后插入这条新记录。假设有一个table1表,有3个字段a, b, c。它们都有一个唯一索引。
CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE);
假设table1中已经有了3条记录
a b c
1 1 1
2 2 2
3 3 3
下面我们使用REPLACE语句向table1中插入一条记录。
REPLACE INTO table1(a, b, c) VALUES(1,2,3);
返回的结果如下
Query OK, 4 rows affected(0.00 sec)
在table1中的记录如下
a b c
1 2 3
我们可以看到,REPLACE将原先的3条记录都删除了,然后将(1, 2, 3)插入。
求sql语法
SQL语言快速入门(一)
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。
SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create,及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下SQL语言的基本知识。
数据库表格
一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库
中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有
自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型
,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个
名为天气的数据库表格的实例。
城市最高气温最低气温
北京 10 5
上海 15 8
天津 8 2
重庆 20 13
该表格中“城市”,“最高气温”和“最低气温”就是三个不同的列
,而表格中的每一行则包含了具体的表格数据。
数据查询
在众多的SQL命令中,select语句应该算是使用最频繁的。Select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句的语法格式如下:
select column1 [, column2,etc] from tablename
[where condition];
([]表示可选项)
Select语句中位于Select关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。
Select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目
标表格。
Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在where条件从句中可以使用以下一些运算符来设定查询标准:
=等于
>大于
<小于
>=大于等于
<=小于等于
<>不等于
除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。
LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:
Select firstname, lastname, city
from employee
where firstname LIKE‘E%’;
(注意,字符串必须被包含在单括号内)
上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句:
Select* from employee
where firstname=‘May’;
查询所有名称为May的行。
SQL语言快速入门(二)
创建表格
SQL语言中的create table语句被用来建立新的数据库表格。Create table
语句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);
如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件
选项:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);
举例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));
简单来说,创建新表格时,在关键词create table后面加入所要建立的表格
的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件
等。注意,所有的SQL语句在结尾处都要使用“;”符号。
使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面
可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在
称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或
列的名称。
数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采
用的数据类型,而不能使用number的数据类型。
SQL语言中较为常用的数据类型为:
char(size):固定长度字符串,其中括号中的size用来设定字符串的最大
度。Char类型的最大长度为255字节。
varchar(size):可变长度字符串,最大长度由size设定。
number(size):数字类型,其中数字的最大位数由size设定。
Date:日期类型。
number(size,d):数字类型,size决定该数字总的最大位数,而d则用于
设定该数字在小数点后的位数。
最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限
制条件就是当向特定列输入数据时所必须遵守的规则。
例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有
记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件
还包括not, null和primary key等。Not null用来规定表格中某一列的值
不能为空.Primary key则为表格中的所有记录规定了唯一的标识符。
向表格中插入数据
SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语
句的使用格式如下:
insert into tablename
(first_column,...last_column)
values(first_value,...last_value);
例如:
insert into employee
(firstname, lastname, age, address, city)
values(‘Li’,‘Ming’, 45,‘No.77 Changan Road’,‘Beijing”);
简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输
入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后
,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的
记录值。
更新记录
SQL语言使用update语句更新或修改满足规定条件的现有记录。
Update语句的格式为:
update tablename
set columnname= newvalue [, nextcolumn= newvalue2...]
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
update employee
set age= age+1
where first_name=‘Mary’and last_name=‘Williams’;
使用update语句时,关键一点就是要设定好用于进行判断的where条件
从句。
删除记录
SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的
格式为:
delete from tablename
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
delete from employee
where lastname= May;
简单来说,当需要删除某一行或某个记录时,在delete from关键词之
后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,
如果用户在使用delete语句时不设定where从句,则表格中的所有记录将
全部被删除。
删除数据库表格
在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记
录。Drop table命令的使用格式为:
drop table tablename;
例如:
drop table employee;
如果用户希望将某个数据库表格完全删除,只需要在drop table命令后
输入希望删除的表格名称即可。Drop table命令的作用与删除表格中的所有
记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列
的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息
全部删除。
以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。
SQL语言快速入门(三)
我们日常使用SQL语言的工作过程中,使用最多的还是从已经建立好的数据库中查询信息。下面,我们就来详细介绍一下如何使用SQL语言实现各种数据库查询操作。
SELECT…FROM
为方便讲解,我们在数据库中创建名为Store_Information的如下数据表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000
SQL语言中用于数据库查询的最简单的命令就是SELECT…FROM,语法格
式为:
SELECT\"column_name\" FROM\"table_name\"
例如,如果我们希望查询Store_Information数据表中所有的商店名称时,可
以使用如下命令:
SELECT store_name FROM Store_Information
查询结果显示为:
Store_Name
Los Angeles
San Diego
Los Angeles
Boston
如果用户希望一次查询多个字段,可以将所要查询的字段名称依次加入
SELECT关键字之后,中间用“,”隔开即可。
DISTINCT
SELECT关键字支持用户查询数据表中指定字段的所有数据,但是这样有时
就会不可避免的出现重复信息。如果用户希望只查询那些具有不同记录值的信
息的话,可以使用SQL语言的DISTINCT关键字。语法格式如下:
SELECT DISTINCT\"column_name\"
FROM\"table_name\"
例如,我们可以使用以下命令查询Store_Information数据表具有不同记录值
的所有记录。
SELECT DISTINCT Store_Name FROM Store_Information
查询结果如下:
Store_Name
Los Angeles
San Diego
Boston
WHERE
除了选择具有不同记录值的记录之外,有时我们可能还会需要根据某些条
件对数据库中的数据进行查询。例如,我们可能需要查询Store_Information数
据表中销售额超过1000美圆的商店。为此,我们可以使用SQL语言的WHERE
关键字设定查询条件。语法格式如下:
SELECT\"column_name\"
FROM\"table_name\"
WHERE\"condition\"
由此,我们可以使用如下命令查询销售额超过1000美圆的商店信息:
SELECT store_name FROM Store_Information WHERE Sales> 1000
查询结果显示为:
store_name
Los Angeles
运算函数
现在,我们已经了解到在使用SQL语言进行数据库查询操作时可以通过对
数值的判断设定灵活的查询条件。为了增强对运算的支持能力,SQL提供了众
多实用的运算函数供广大用户使用。例如,我们可以直接在SQL命令中调用
SUM或AVG这两个分别用于计算总数和平均数的函数。语法格式如下:
SELECT\"function type\"(\"column_name\")
FROM\"table_name\"
如果我们希望查询Store_Information数据表中所有商店的总销售额的话,可
以使用如下命令:
SELECT SUM(Sales) FROM Store_Information
查询结果显示为:
SUM(Sales)
50
COUNT
除了SUM和AVG函数之外,COUNT函数是SQL语言中另一个较为常用
的运算函数。COUNT函数可以用来计算数据表中指定字段所包含的记录数目。
语法格式为:
SELECT COUNT(\"column_name\")
FROM\"table_name\"
例如,如果我们希望查询Store_Information数据表中的有关商店的记录条数
时,可以使用如下命令:
SELECT COUNT(store_name)
FROM Store_Information
查询结果显示为:
Count(store_name)
4
COUNT函数可以和DISTINCT关键字一起使用从而可以查询数据表中指定
字段中所有具有不同记录值的记录数目.例如,如果我们希望查询Store_Information
数据表中不同商店的数目时,可以使用如下命令:
SELECT COUNT(DISTINCT store_name)
FROM Store_Information
查询结果显示为:
Count(DISTINCT store_name)
3
GROUP BY
下面我们来进一步看一下SQL语言中的集合函数。上文中,我们曾使用
SUM函数计算所有商店的销售总额,如果我们希望计算每一家商店各自的总销
售额时该怎么办呢?要实现这一目的我们需要做两件事:首先,我们需要查询
商店名称和销售额两个字段;然后,我们使用SQL语言的GROUP BY命令将
销售额按照不同的商店进行分组,从而计算出不同商店的销售总额。GROUP
BY命令的语法格式为:
SELECT\"column_name1\", SUM(\"column_name2\")
FROM\"table_name\"
GROUP BY\"column_name1\"
我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
查询结果显示为:
store_name SUM(Sales)
Los Angeles 00
San Diego 0
Boston 0
小注:
GROUP BY关键字一般应用于同时查询多个字段并对字段进行算术运
算的SQL命令中。
HAVING
用户在使用SQL语言的过程中可能希望解决的另一个问题就是对由sum或
其它集合函数运算结果的输出进行限制。例如,我们可能只希望看到Store_
Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使
用HAVING从句。语法格式为:
SELECT\"column_name1\", SUM(\"column_name2\")
FROM\"table_name\"
GROUP BY\"column_name1\"
HAVING(arithematic function condition)
(GROUP BY从句可选)
由此,我们可以使用如下命令实现上述查询目的:
SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales)> 1500
查询结果显示为:
store_name SUM(Sales)
Los Angeles 00
小注:
SQL语言中设定集合函数的查询条件时使用HAVING从句而不是
WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。
ALIAS
下面,我们重点介绍一下如何在SQL命令中设定别名。SQL语言中一般使
用两种类型的别名,分别为字段别名和数据表别名。简单的说,使用字段别名
可以帮助我们有效的组织查询的输出结果。例如,上文所列举的多个实例中,
当我们计算商店销售总额时,显示结果中就会出现SUM(sales)。虽然SUM(sales)
并不会对我们理解查询结果带来不便,但是如果我们需要在查询中使用多项复
杂运算时,显示结果就不会这么直观了。如果这时我们使用字段别名就会极大
的提高查询结果的可读性。
对于数据表别名,我们可以通过将别名直接放置在FROM从句中数据表名
称的后面设定。数据表别名在我们下面将要讲述的连接多个数据表进行查询的
操作中极为有用。
字段和数据表别名的语法格式如下:
SELECT\"table_alias\".\"column_name1\"\"column_alias\"
FROM\"table_name\"\"table_alias\"
即别名都直接放置在各自对应名称的后面,中间用空格分开。
以Store_Information数据表为例,我们可以在GROUP BY一节中所使用的
SQL命令中设置如下字段和数据表别名:
SELECT A1.store_name\"Store\", SUM(Sales)\"Total Sales\"
FROM Store_Information A1
GROUP BY A1.store_name
查询结果显示为:
Store Total Sales
Los Angeles 00
San Diego 0
Boston 0
连接多个数据表
最后,我们来看一下如果使用SQL语言连接多个数据表,实现对多个数据
表的查询。为方便讲解,我们在数据库中分别创建了两个名为Store_Information
和Region的数据表。
Store_Information
Store_Name Sales Date
Los Angeles 00 Jan-10-2000
San Diego 0 Jan-11-2000
Los Angeles 0 Jan-12-2000
Boston 0 Jan-12-2000
Region
Region_Name Store_Name
East Boston
East New York
West Los Angeles
West San Diego
下面,我们就来看一下通过数据表的连接实现按不同区域查询销售额。
我们注意到在名为Region的数据表中包含区域和商店两个字段信息,而在名为
Store_Information的数据表中则包含每一家商店的销售信息。因此,为了得到按
区域划分的销售信息,我们需要将两个不同数据表的信息结合在一起进行查询.
通过对上述两个数据表的分析,我们发现每个数据表中都包含一个名为
Store_Name的字段,因此,我们可以使用如下命令实现查询目的:
SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Region A1, Store_Information A2
WHERE A1.store_name= A2.store_name
GROUP BY A1.region_name
查询结果显示为:
REGION SALES
East 0
West 50
说明:
上述查询命令的前两行用于指定所要查询的目标字段,分别为Region数据
表中的Region_Name字段和Store_Information数据表中Sales字段的记录值总
数。这里,我们设定两个字段的别名分别为REGION和SALES,两个数据表的
别名分别为A1和A2。如果我们只使用字段别名而不设定数据表别名的话,上
述SQL命令的第一行就变成如下形式:
SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES
由此我们可以看出有效的使用数据表别名,可以极大的简化对多个数据表
进行操作的SQL命令。
上述查询命令的第3行为WHERE从句,正是该从句设定了两个数据表的
连接条件。因为我们希望确保Region数据表中的Store_Name字段能够与
Store_Information数据表中的同名字段相对应,所以我们规定两个字段的记录
值应当相等。在连接多个数据表时,一定要准确设定数据表的连接条件,如果
WHERE从句设定不正确,则可能导致查询结果中出现众多不相关的数据.
SQL中模式创建的语法
不会太多
基本的增删改查、函数、视图、存储过程、索引等就行了。
具体的语法给你贴些出来吧。
-----------------------------------------------
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--定义当前事务数据访问特征
--程序化sql
declare--为查询设定游标
explan--为查询描述数据访问计划
open--检索查询结果打开一个游标
fetch--检索一行查询结果
close--关闭游标
prepare--为动态执行准备sql语句
execute--动态地执行sql语句
describe--描述准备好的查询
---局部变量
declare@id char(10)
--set@id='10010001'
select@id='10010001'
---全局变量
---必须以@@开头
--IF ELSE
declare@x int@y int@z int
select@x= 1@y= 2@z=3
if@x>@y
print'x> y'--打印字符串'x> y'
else if@y>@z
print'y> z'
else print'z> y'
--CASE
use pangu
update employee
set e_wage=
case
when 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.05
end
--while continue break
declare@x int@y int@c int
select@x= 1@y=1
while@x< 3
begin
print@x--打印变量x的值
while@y< 3
begin
select@c= 100*@x+@y
print@c--打印变量c的值
select@y=@y+ 1
end
select@x=@x+ 1
select@y= 1
end
--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 value
ex:(宿主)
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< 1000
and stockindex= 24
not stock***='man'
stocknumber between 20 and 100
stocknumber 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_name
select stockname,"stocknumber"= count(*) from table_name group by stockname
--------- group by将表按行分组,指定列中有相同的值
having count(*)= 2--------- having选定指定的组
select*
from table1, table2
where table1.id*= table2.id--------左外部连接,table1中有的而table2中没有得以null表示
table1.id=* table2.id--------右外部连接
select stockname from table1
union [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= default
Stockname= null
Stocknumber= Stockname+ 4
***delete***
delete from table_name where Stockid= 3
truncate 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(/*常用函数*/)***
----统计函数----
AVG--求平均值
COUNT--统计数目
MAX--求最大值
MIN--求最小值
SUM--求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage=
(select max(e_wage)
from employee)
--stdev()
--stdev()函数返回表达式中所有数据的标准差
--stdevp()
--stdevp()函数返回总体标准差
--var()
--var()函数返回表达式中所有值的统计变异数
--varp()
--varp()函数返回总体变异数
----算术函数----
/***三角函数***/
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.1415926535897936
rand([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]*/
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())
运行结果如下
------------------------------------------
199 Jan 15 2000
----日期函数----
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_name
into newtable
from oldtable*/
isdate()--函数判断所给定的表达式是否为合理日期
isnull(<check_expression>,<replacement_value>)
--函数将表达式中的null值用指定值替换
isnumeric()--函数判断所给定的表达式是否为合理的数值
newid()--函数返回一个uniqueidentifier类型的数值
nullif(<expression1>,<expression2>)
--nullif函数在expression1与expression2相等时
--返回null值若不相等时则返回expression1的值
====精妙SQL语句====
说明:复制表(只复制结构,源表名:a新表名:b)
SQL: select* into b from a where 1<>1
说明:拷贝表(拷贝数据,源表名:a目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from b;
说明:显示文章、提交人和最后回复时间
SQL: select a.title,a.username,b.adddate
from table a,(select max(adddate) adddate from table where table.title=a.title) b
说明:外连接查询(表名1:a表名2:b)
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
说明:日程安排提前五分钟提醒
SQL: select* from日程安排 where datediff('minute',f开始时间,getdate())>5
说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
delete from info where not exists( select* from infobz where info.infid=infobz.infid)
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
关于insert语句的语法形式, insert语句的三种写法的介绍到此结束,希望对大家有所帮助。