当前位置:首页 » 编程语言 » sql的用法

sql的用法

发布时间: 2022-07-24 06:14:29

① 关于sql语句的用法

--Z的字段类型要和table2中的Z字段一样,这里只用int演示
alter table table1 add Z int(5) unsigned default 0;
update table1 set z= (select table2.Z from table2 left jion talble1 where table2.X=table1.X AND table2.Y=table1.Y)

② SQL语句中所有的用法谁会!!

sp_helpdb ----------查本服务器中所有数据库 可跟库名
例:sp_helpdb 库名
-------------------------------------------------------------
sp_databases -------------查看本服务器中可用的数据库
--------------------------------------------------------------------
sp_helpfile -------------------查看当前工作着的数据库
-----------------------------------------------------------
sp_helpfilegroup ---------------查看当前工作着的组的信息。可加参数,跟组名
例:sp_helpdb 库名
----------------------------------------------------------------
sp_renamedb -----------改数据库名
例:sp_renamedb 旧库名,新库名
----------------------------------------------------------------
select groupname from sysfilegroups where status=24
---------查看文件组 =8是查只读文件组 =16是查默认文件组 =24是查即只读又默认
---------------------------------------------------------------------------
sp_dboption ----------修改数据库选项值
例:sp_dboption 库名 选项 值
值决定真假 一般用:true/faule 或off/on表示
选项一般常用为:use only(数据库拥有者)single user(单一用户)read only(只读)
--------------------------------------------------------------------------
dbcc shrinkdatabase ---------收缩数据库
例:dbcc shrinkdatabase (库名,10)
收缩库,剩余空间保留10%,后面如果不加notruncate,则释放空间操作系统,
加truncateonly,归还空间给操作系统,但忽略所给的百分比数值。
----------------------------------------------------------------------
dbcc shrinkfile ---------收缩文件
用法与ddcc shrinkdatabase相同。
----------------------------------------------------------------------
alter database ---------------修改数据库
用法:这是起始句,告诉要做的是修改数据库,然后再接要做什么工作。每次只做一项工作
alter database 库名
add file 文件名....to filegroup 文件组名
----------------增加库文件,格式与建库时括号里指定大小时的格式一样
add log file 文件名 -------------增加日志文件
remove file 文件名 ---------删除库内的文件
add filegroup 文件组名 -----------增加一个文件组
modify file 文件名 -------------修改文件属性
modify filegroup 组名 ------------修改文件组属性
---------------------------------------------------------------------------
drop database --------------删除数据库
例:drop database 库名1,库名2 ---------可同时删除两个库
------------------------------------------------------------------------
create table 表名
(列名 类型,
列名 类型) -------------------建立表
--------------------------------------------------------------------
select * from 表名 ---------查询表结构
--------------------------------------------------------------------
select @@dbts ----------查询最后一次操作
--------------------------------------------------------------------
insert into 表名
(列名,列名)
values (变量,变量.....) ------------向表中插入数据
如省略列名,则必须把每列的变量填全,不可缺少。可以省略 into
--------------------------------------------------------------------
sp_addtype 自定义类型名 系统类型名 -------用户自定义类型
--------------------------------------------------------------------
sp_droptype 自定义类型名 -----------删除自定义类型
如有数据库正在使用该自定义类型,则不能删除
--------------------------------------------------------------------
alter table ---------修改表结构
用法: alter table 表名
alter column 列名 类型 ---------修改列的类型
drop column 列名 --------删除列
add (column) 列名 --------增加列,实际用时不加 column
-----------------------------------------------------------------
sp_help -------------查看数据库中对象信息
用法: sp_help 表名 ---------------查表的信息
或 sp_help 库名 --------------查库信息
后面可以跟库名或者表名,是查数据库或者表的信息
-----------------------------------------------------------------
sp_spaceused --------查看对象占用的空间信息
用法: sp_spaceused ----------查当前库占用空间信息
或 sp_spaceused 表名 ----------查指定表占用空间信息
后面可以加表名查看表占空间信息。如不加,则查看当前数据库。
------------------------------------------------------------------
sp_depends ------------查看对象的相关性
用法: sp_depends 表名 -----------后面加表名
------------------------------------------------------------------
sp_rename ---------------重新命名
用法: sp_rename 旧表名,新表名 ---------改表名
或 sp_rename '表名.旧列名','新列名' 'column' -------修改列名
--------------------------------------------------------------------
create index --------------创建索引
用法: create index 索引名 on 表名 (列名) ------创建索引
或: create unique clustered index 索引名 on 表名 (列名)
------创建簇集唯一索引 unique是建唯一索引 clustered是建簇集索引
---非簇集索引用:nonclustered
----------------------------------------------------------------------
select top ---------查表中前几行
用法: select top 3 * from 表名 -------查表中前三行
或: select top 10 percent * from 表名 -------显示表中前10%数据
------------加入percent是百分比的意思。只以大于的最小整数,无小数
----------------------------------------------------------------------
select 列名,列名,列名 from 表名 -------显示表中特定的列
----------------------------------------------------------------------
select *,列名 from 表名 ----------查询表中所有,后面再加一列
----------------------------------------------------------------------
select distinct ----------查询不重复数据 distinct用于去掉重复数据
用法: select distinct * from 表名 ---------查表中不重复数据
或: select distinct * into 新表名 from 旧表名 ------查旧表中不重复数据同时生成新表
-------------------------------------------------------------------------------------
select 列名+列名 from 表名 -------允许有计算式出现,显示无列名的计算结果
如想加列名,则: select 列名+列名 as 新列名 from 表名
-------------------------------------------------------------------------
select 年龄,联系电话,cast (年龄 as varchar(2))+联系电话 from 表名
--------把整型数据年龄转化为字符型与字符型数据联系电话相加

③ sql语句用法

having子句与where有相似之处但也有区别,都是设定条件的语句。
在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)

简单说来:where子句:
selectsum(num)asrmbfromorderwhereid>10//只有先查询出id大于10的记录才能进行聚合语句

having子句:
selectreportstoasmanager,count(*)(*)>4

通过使用GROUPBY子句,可以让SUM和COUNT这些函数对属于一组的数据起作用。
当你指定GROUPBYregion时,属于同一个region(地区)的一组数据将只能返回一行值.也就是说,表中所有除region(地区)外的字段,只能通过SUM,COUNT等聚合函数运算后返回一个值.
HAVING子句可以让我们筛选成组后的各组数据.HAVING子句在聚合后对组记录进行筛选
而WHERE子句在聚合前先筛选记录.也就是说作用在GROUPBY子句和HAVING子句前
看下面这几个例子吧:
显示每个地区的总人口数和总面积.
SELECTregion,SUM(population),SUM(area)FROMbbcGROUPBYregion
先以region把返回记录分成多个组,这就是GROUPBY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。
--显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
SELECTregion,SUM(population),SUM(area)FROMbbcGROUPBYregion
HAVINGSUM(area)>1000000

④ sql语句用法

哈,因为数据库修改数据时用的命令是update,所以都叫做更新了,其实和修改是一个意思来的......但是为了规范,还是叫更新数据比较好。

update mytable set first_column='update!' where second_column='update me!'
一步一步看啦
update mytable -- 要更新mytable表

set first_column='update!' -- 更新 first_column列的内容为'update!'

where second_column='update me!' --限制条件只有 second_column列内容为'update me!' 的才进行更新

⑤ SQL 一个% 和多个% 的用法

1、在SQL语句中一个% ,代表任意个字符

select * from emp where name like 'K%';
即表示查询 emp表中 以K开头姓名的数据;
2、两个% 代表两段内容是任意的

select * from emp where name like '%OK%';
即表示查询emp 表中 姓名包含OK的数据

⑥ SQL语句中查询的用法

distinct的作用就是去除重复的列。比如
一张表student(姓名,年级)然后里面有许多数据,例如:
姓名
年级
张三
大一
张三
大二
李四
大三
王五
大一
让你查询出
student表中,有几种姓名?
如果你写成:
select
姓名
from
student
那么结果是:
姓名
张三
张三
李四
王五
这样的话,就会出现两个张三
这样既占用空间,又不符合常理,这时候
如果你用distinct关键字的话,则:
select
distinct
姓名
from
student
结果是:
姓名
张三
李四
王五
总之,一句话,distinct就是去除重复列的。
明白了把?看在我写那么多的费上,给我分吧~~(*^__^*)

⑦ SQL语言的用法

有关数据库的一写操作:
创建表项就不说了.
CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(1),
Sage INT,
Sdept CHAR(15));
插入记录:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
删除记录:
delete from Student where Sno = 'aaa';
注:只需要删除一个主键就可以了。其他的记录会相应的删除掉。
删除表中一个字段:
ALTER TABLE Student DROP column Ssex; 列名;
修改表中的那一行数据:
原来的记录:
Sno Sname Ssex Sdept
aaa mary f 172
update Student set Sname='mary1', Ssex='m' where Sno='aaa';
修改后:
Sno Sname Ssex Sdept
aaa mary1 m 172

desc倒叙排列:
建立索引:
create unique index Sno on Student(Sno);
索引的一点好处:在查询时候比较方便,在存在的所有记录中查找一个Sno=1的时候!建立索引的表中就直接查找Sno项比较它是否=1找到后查相关的记录就比较快。没有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比较其值=1的相关记录。

默认是ASC。
按表中哪个字段倒叙排序:
select * from Student order by Sno desc;
注意:要排序的字段必须是int型。

设置成自增长的字段在插入数据的时候不需要插入该字段的值:
select * from Student order by Sno desc;
原来没有设置成自增长插入数据命令:
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
将int型的Sno字段设置成自增长后
insert into Student (Sname,Ssex,Sdept) values('mary1','f','172');
insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172');
insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172');
insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172');

在表中的排序如下:
Sno Sname Ssex Sdept
1 mary1 f 172
2 mar1y f 172
3 ma1ry f 172
4 m1ary f 172
/*********************************************************************************
2006.7.20
*********************************************************************************/
查询表中记录总数:(无字段名字)
select count() from usertable;
或:(userid 为字段名字,结果是字段的总行数)
select count(*) userid from Student;

查询字段的平均值:
selecet avg(Sno) from Student;
select avg(字段名)from 表名;

给出查询的字段的平均值取别名:
select avg(字段名) as (别名) from (表名);

查找指定的字段的其他字段
select Sdept,Ssex,Sname
from Student
where Sno=3;
(where Sname='mary1';或则where Sname like 'mary1';)

在between语句查询的都是在and之间的所有值而IN语句则必须是in括号里面的值.
select Sno,Ssex,Sname from Student where Sdept between 180 and 190;

select Sno,Ssex,Sname from Student where Sdept in (172,190);

查询Student表中的所有的名字中的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%%';
注:%%之间是把所有的String类型的值

like和where条件查询
select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;

查询Student表中的所有的名字中间有mary的所有名字对应的的Sno和Ssex值.
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';
注:mary1,1mary,marydsajdh,等.

注意:and or not 用的时候,and是用在连接并列条件的2个不同的字段
or是用在选择的2个不同的字段之间,not一般用于not in(180,190)之间.
order by 和asc|desc的一点不同:
order by是按先进先排,desc是先进后排,asc和desc是排列顺序不一样.

disctinct条件查询
distinct 这个关键字来过滤掉多余的重复记录只保留一条,

select distinct name from table 表示将返回table表中name字段不重复的所有字段的集合。

注:distinct必须放在开头,select id distinct name from table 是错误的!

-------------------------------------------------------------------------------------
表TEST_1:
id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77
-------------------------------------------------------------------------------------

select distinct(name1) from test_1

结果:
name1
aaa
bbb
ccc
ddd
eee
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的集合,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,即上表中只能返回name1字段的所有不重复记录集合。

-------------------------------------------------------------------------------------
如果现在想查询出表test_1中所有name1不重复的id和name1字段的记录呢?

select distinct name, id from table

结果:
name1 id
aaa 9
bbb 5
bbb 8
ccc 3
ccc 4
ddd 6
eee 7

并不是我们所想要的结果

select distinct name,id from table 作用了两个字段,也就是必须得id与name都相同的才会被排除,即返回去除table表中id和name两个字段同时相同情况下所有集合。
-------------------------------------------------------------------------------------

如果现在想查询出表test_1中所有name1不重复的所有字段的记录呢?

对于
select * from test_1 where name1 in (select distinct name1 from tablename)
等价于
select * from test_1 where name1 in ('aaa','bbb','ccc','ddd','eee')
我们很可能认为它是可行的,但实际上结果却是:

id name1 name2
9 aaa 11
8 bbb 22
3 ccc 33
4 ccc 44
5 bbb 55
6 ddd 66
7 eee 77

正确sql应该是:
select * from test_1 inner join (select min(id) as id from test_1 group by name1 order by id ) T on test_1.id = T.id

min(id)或max(id)都行,order by id 可要可不要.这里用内连接实现联合查询,也可以用where语句

select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id

-------------------------------------------------------------------------------------

**********************************************************************************
联合查询
**********************************************************************************
查询表中的各个字段的值
select Sno,Sname,Ssex,Sdept from Student;

多表查询(2个表,publishtable和publishtable,给表起了别名)
select u.userid,u.age,u.username,p.publishname from usertable u,publishtable p where u.userid = p.publishid;

多表查询(3个表employees,departments和locations表,给表起别名)
(从多表中查询出所有姓smith的雇员的名字,所在部门以及部门所在的城市)
select e.first_name,e.last_name,d.department_name,l.city from employees e,departments d,locations l where e.department_id = d.department_id and d.location_id = l.location_id and e.last_name = 'smith';

***********************************************************************************
联合查询
***********************************************************************************

等值连接
/*将books表和表bookstype中的信息联合查询,条件是联系键相等*/
select * from books,bookstype where bookstype.typeid = books.typeid

内连接
/*将books表和表bookstype中的信息联合查询,条件是联系键相等,和等值连接等价*/
select * from books inner join bookstype on books.typeid = bookstype.typeid

左外连接

/*将books表和表bookstype中的信息联合查询,包括在books表中没有和bookstype表关联的信息*/
select * from books left outer join bookstype on bookstype.typeid = books.typeid

右外连接

/*将bookstype表和books表中的信息联合查询,包括在bookstype表中没有和books表关联的信息*/
select * from books right outer join bookstype on bookstype.typeid = books.typeid

全连接

/*将bookstype表和books表中的信息联合查询,包括在books表中没有和bookstype表关联的信息以及在bookstype表中没有和books表关联的信息*/

select * from books full outer join bookstype on bookstype.typeid = books.typeid

***********************************************************************************
联合查询
***********************************************************************************
多表查询应该注意的几点:
多表查询和单表查询的不同在于多表查询在查询某个字段的时候应该带上表名
格式是:表名.字段名,表名.字段名
select bbs.id,bbs.name,bbs.dep,bbsr.id,bbsr.name
from bbs,bbsr
where bbs.id=bbsr.id;
一般的在多表查询中的表名取的麻烦用别名来代替
如下:
select b.id,b.name,b.dep,c.id,c.name
from bbs as b ,bbsr as c // from bbs b,bbsr c***注意取别名也可以用空格或则用as.
where b.id=c.id;

*************************************************************************************
分组查询
*************************************************************************************

在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息SQLServer 按照group by 子句中指定的表达式的值分组查询结果。

-------------------------------------------------------------------------------------
分组查询一般是用来进行统计需求的,要进行分组查询必须使用group by子句或having子句,在分组统计时要用到SQL的多行存储函数。在where条件中不能使用多行存储函数.

查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。

在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数.
------------------------------------------------------------------------------------

部门表department:

department_id department_name
10 开发部
20 测试部
30 用服部
40 财务部
50 培训部

雇员表employees:(department_id为外键)

id employees_name department_id
1 cheng 10
2 zhou 50
3 liguo 10
4 wang 20
5 feng 30
6 ling 30
7 wu 20
8 tang 20
9 yang 40
10 tan 50
------------------------------------------------------------------------------------

按部门编号统计出表employees中的每个部门的人数(group by分组查询)
select department_id, count(*) from employees
group by department_id;

显示出部门人数少于5人的部门编号以及人数( 按照department_id来分组,having count(*)<5做为限制条件 )
select department_id 部门号, count(*) 部门人数 from employees
group by department_id
having count(*)<5;
--------------------------------------
(注意:having必须在group by子句的后面)
--------------------------------------
图:
部门号 部门人数
------------------------------
10 2
20 3
30 2
40 1
50 2
-------------------------------------------------------------------------------------
where子句和having子句可以同时使用,where子句是对要分组的行进行过滤,即选择要分组的行;
而having子句是对分组后的数据进行过滤。此时where子句必须在group by...having子句之前
-------------------------------------------------------------------------------------
显示出所有工资大于5000,且部门人数大于5个的部门号,部门最低工资和部门人数

select department_id 部门号(记住department_id 和部门号之间要空格), min(salary) 最低工资,count(*) 部门人数 from employees
where salary >5000
group by department_id
having count(*)>5;

图:
--------------------------------------
部门号 最低工资 部门人数
80 6100 34
100 6800 6

group by 按照哪个字段来排序查询,一般的group by和having一起使用,注意在查询中只能查询与group by和having有关的字段。
--------------------------------------

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

查询每个部门的每种职位的雇员数(待测试...)
select deptno,job,count(*) from emp group by deptno,job;

*********************************************************************************
数据排序
*********************************************************************************

order by子句中可以用asc(升序)和desc(降序)来完成相应的排序,默认时是按找asc(升序)。
---------------------------------------------------------------------------------
显示出所有工资大于5000,且部门人数大于5个的部门号,部门最低工资和部门人数,并要求按照部门人数降序排序.

select department_id 部门号(记住department_id 和部门号之间要空格), min(salary) 最低工资,count(*) 部门人数 from employees
where salary >5000
group by department_id
having count(*)>5
order by count(*)desc
-------------------------------------------------------------------
(注意:当对分组查询后的结果进行排序时,order by 必须在group by之后)
-------------------------------------------------------------------

图:
--------------------------------------
部门号 最低工资 部门人数
80 6100 34
100 6800 30
90 6500 28
70 6300 25

*******************************************************************************
子查询
*******************************************************************************

-----------------------------------------------------------------------------------------------------
子查询是一个在select查询中含有其他的select语句,子查询通常用在where子句中,即将一个查询结果做为查询的条件.
-----------------------------------------------------------------------------------------------------
统计表employees中所有工资小于平均工资的人数
select count(*)工资 from employees
where salary <
(select avg(salary) from employees)
图:
----------------
工资
56
49
36

Select MIN(Salary),Manager_id
from Employee
group by Manager_id
having MIN(Salary) >
(Select MIN(Salary)
From Employee
where Manager_id=004);

注意在多表查询中返回的值应该是一个唯一确定的值,而不应该是多中值。
select Employee_id,Last_name,Salary,Manager_id
from Employee
WHERE Salary>
(select Salary
from Employee
where Manager_id=003)
and
Last_name= (select Last_name
from Employee
where Last_name like 'mary');

注意在any,or,all的区别:
Select Salary,Manager_id,Last_name,Employee_id
from Employee
where Salary < any
(Select Salary
From Employee
where Manager_id=005);

Select Salary
From Employee
where Manager_id=005;返回的是2000,2500
就是在工资中小于2000.2500其中一个就可以了,而ALL则必须是小于2000和2500其中任何一个
。而or则是和and用在一起的.

******************************************************************************************
集合运算
******************************************************************************************

---------------------------------------------------------------------------------
集合运算是将2个或多个子查询结果进行(并union),交(intersect)和减(minus)
---------------------------------------------------------------------------------
(并union):
select employee_id,empname from emp1
union
select employee_id,name from emp2

图:
-----------------
employee_id empname
100 king1
1000 king2
1000 king3
10000 king4
100000 king5
1000000 king6

注:使用union,重复行只包括一个,当使用union all时将包括重复行

交(intersect):2个或多个子查询的公共行
select employee_id,empname from emp1
intersect
select employee_id,name from emp2

减(minus):从第一个查询结果中去掉出现在第二个查询结果中的行:
select employee_id,empname from emp1
minus
select employee_id,name from emp2

*****************************************************************************************
视图,存储过程和触发器
*****************************************************************************************

创建视图:(查询数据,用于系统统计报表)
create view dept_sum_vu
(name,minsal,maxsal,avgsal)
as select d.department_name,min(e.salary),max(e.salary),avg(e.salary)
from employees e,departments d
where e.department_id = d.department_id
group by d.department_name;

存贮过程,触发器和删除外键

1).存贮过程:
存贮过程的路径:打开Stored Proceres中new一个新的Stored Proceres,中间填写代码,代码如下:
CREATE PROCEDURE sa.bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id

CREATE PROCEDURE bbsTest AS

select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
on a.area_id = b.id

2).触发器

打开用户表项,点设计表,选中其中一个字段,右键task点manager triggers,在弹出的表单中写代码:
CREATE TRIGGER [tD_bbs_area] ON [dbo].[bbs_area]
FOR DELETE
AS
BEGIN
DELETE rebbs
FROM bbs, deleted
WHERE rebbs.bbs_id = bbs.bbsid
AND bbs.area_id = deleted.id

DELETE bbs
FROM deleted
WHERE bbs.area_id = deleted.id

END

3).删除外键
打开用户表项,点设计表,选中其中一个字段,右键relationships,在弹出的主键和外键中选择就可以了.
删除外键,需要先删除主键表里面的有关外键的字段,再来删除外键的有关字段.

⑧ SQL的基本操作

1.创建表

(1)用Create Table 命令创建表

语法:

Create Table tabl_name

({

}column_name As computed_column_expression

}

}[,...n]

)

[On {fiegroup | Default}]

[Textimage_On {fiegroup | Default}]

例子:

打开cust数据库,创建一个表,该表包含了学生的有关信息,即有学号、姓名、性别、出生日期、籍贯、联系电话、住址和备注信息。

Use cust

Create Table students

(

number int not null,

name varchar(10) not null,

sex char(2) null,

birthday datetime null,

hometown varchar(30) null,

telphone_no varchar(12) null,

address varchar(30) null,

others varchar(50) null

)

在这个表中number表示学生代号,数据类型为int,不允许为空;name表示学生姓名,数据类型为varchar,长度为10,不允许为空;sex表示学生的性别,数据类型为char,长度为2,允许为空;birthday表示学生的出生日期,数据类型为datetime,允许为空;hometown表示学生的籍贯,数据类型为varchar,长度为30,允许为空;telephone_no表示学生的联系电脑,数据类型为varchar,长度为12,允许为空;address表示学生的住址,数据类型为varchar,长度为30,允许为空;others表示学生的备注信息,长度为50,允许为空。

2.修改表的结构

(1)使用T-SQL语句增加和删除一个新列

语法:

Alter Table table

{

ADO

{[]

|colun_name As computed_column_expression

|[]

}[,...n]

|Drop

{Column column

}[,...n]

}

例子:打开cust数据库,修改其中的表students的结构,增加一个新字段,字段名为ying,数据类型是varchar,长度是10,没有默认值,充许为空。

Use cust

Alter Table students Add ying varchar(10) null

打开cust数据库,修改其中的表students的结构,删除一个字段,字段名为ying。

Use cust

Alter Table students Drop Column ying

3.向表中插入数据

(1)用 Insert 语句

语法如下:

Insert [Into]

{table_name|view_name}[(column_list)]

{Values|values_list|select_statement}

注意:在插入数据时,字符数据和日期数据要使用引号引起来。

例子:

Use cust

Insert Into students

Values (11,"影子","男","1999-12-12","湖北","83779805","武汉市桥口区","VB爱好者")

打开cust数据库,向students表中插入数据

(2)用Default 选项

在插入数据时,可以使用Default选项。Default选项有两种形式,一种形式是Default Values,另一种是Default。

Default Values 形式为表中的某一行的所有列插入默认值。使用这种形式的前提条件是表中的所有列必须是这四种类型之一:Identity属性,Timestamp数据类型,允许为Null,或者有一个指定的默认值。否则,会错误信息。

例子:

Use cust

Insert Into students Default Values

这个例子会出现错误,因为students表的number字段是设置为不允许为空的。

Default 形式是为表中的某一列插入默认值。要插入的该列必须具备一定的条件,即该列要么是Timestamp 数据类型,要么是允许为Null,要么是有一个指定的默认值,否则,会出现错误信息。

例子:

Use cust

Insert Into students Values(11,"影子",Default,Default,Default,Default,Default,Default)

由天前2个字段不能为空,所以要赋值,否则会出现错误,而后面的6个字段允许为空,因此可以调用Default默认。

(3)插入部分数据

在使用Insert语句插入数据是,还可以插入部分数据,也就是可以为每一行的指定的部分列插入数据。在插入部分数据时,应该注意以下三个问题:

☆在 Insert 子句中,指定要插入数据的列名。

☆在 Values 子句中,列出与列名对应的数据。列名的顺序和数据的顺序应该完全对应。

☆在 Insert 子句中,没有列出的列应该至少具有这四种类型之一:Identtty 属性,Timestamp 数据类型,允许为 Null,或者有一个指定的默认值。否则,会出现错误信息。

例子:

Use cust

Insert Into students (number,name)

Values (110,"影子")

打开cust数据库,向students表中插入一行数据

注意:如用下例语句将发生错误,因为name字段是不允许为空的(在创建数据库时设定的)

Insert Into students (number)

Values (110)

(4)用 Select 语句插入多条数据

Insert 语句插入数据的特点是每一次只能插入一行数据。相反,Select 也可以用在 Insert 语句中,并且可以一次插入多条数据。使用 Select 语句插入数据的语法形式如下:

Insert table_name

Select column_list

From table_list

Where search_conditions

在使用 Select 语句插入数据时,应该注意下面几点:

☆在 Insert 语句中使用 Select 时,他们参考的表既可以是相同的,也可以是不同的。

☆要插入数据的表必须已经存在。

☆要插入数据的表必须和 Select 的结果集兼容。兼容的含义是列的数量和顺序必须相同,列的数据类型或者相同,或者SQL Server 可以自动转换。

例子:

Use cust

Insert students

Select number,name,sex,birthday,hometown,telphone_no,address,others

From students

注意:

Select 后面的字段要输完整,这个例子是自己向自己插入多条数据(自己向自己插入是被允许的)

补充:

你还可以“From students”后面加上“Where name="影子"”,只插入name等于影子的记录,可以用And 和 Or 加上多个条件。

(5)使用 Select Into 插入数据到一个新表中

带有 Into 子句的 Select 语句允许用户定义一个新表并且把数据插入到新表中。这种方法不同于前面讲述的那些方法。在前面的那些方法中,一个共同的特点,是在数据输入之前表已经存在。而使用 Select Into 插入数据的方法,是在插入数据的过程中建立新表。

Select Into 语句的语法如下:

Select select_list

Into new_table_name

From table_list

Where search_conditions

在使用 Select Into 插入数据时,要注意下面几点:

☆在某个数据库中使用 Select Into 插入数据时,设置该数据库的 Select Into/Bulk Copy 为真。

☆新表不能存在,否则会产生错误信息。

☆新表中的列和行是基于查询结果集

☆要插入的数据不记录在日志中。

☆在select_list 中出现的列应该使用别名,否则,新表中的列没有列名。没列名的表只能通过 Select * From new_table_name 的形式查询。因此,应该为列起个别名。

☆这种方法多用在对列进行各种计算的情况。

例子:

Select number,name

Into newcust1

From students

创建新的表newcust1,插入students表中的number和name字段的所有数据。

补充:如果要插入所有字段的记录,则“Select *”,也可在“From students”后加条件,方法和上个例子一样。

(6)用 UPdate 语句修改表中的数据

Update 语句用来修改表中已存在的数据。Update 语句既可以一次修改一行数据,也可以一次修改许多行,甚至可以一次修改表中的全部数据。Update 语句使用 Where 子句指定要修改的行,使用 Set 子句给出新的数据。新数据可以是常量,也可以是指定的表达式,还可以是使用 From 子句来自其他表的数据。

Update 语句的语法如下:

Update {table_name|view_name}

Set {column_list}=expression [,. . .]

[Where clause]

在使用 Update 语句时,如果没有使用 Where 子句,那么就对表中所有的行进行修改。如果使用Update 语句修改数据时与数据完整性约束有冲突,那么修改就不会发生,整个修改事务全部滚回。例如,这种冲突可能是所输入的值是错误的数据类型,或者所输入的值违背了在该列定义的规则约束,等等。

例子:

Use cust

Update students

Set name=name+"007"

Where number>100

打开cust数据库,修改students表,使number>100的数据的name的值全部加"007"。

4.用 Delete 语句删除表中的数据

当数据库中的数据不需要的进修可以删除。一般情况下,删除数据使用 Delete 语句。Delete 语句可以一次

⑨ SQL 中with的用法

SQL 中with的用法如下:

CTE 之后必须跟随引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 语句。也可以在 CREATE VIEW 语句中将 CTE 指定为视图中 SELECT 定义语句的一部分。

可以在非递归 CTE 中定义多个 CTE 查询定义。定义必须与以下集合运算符之一结合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。

CTE 可以引用自身,也可以引用在同一WITH子句中预先定义的 CTE。不允许前向引用。

不允许在一个 CTE 中指定多个WITH子句。例如,如果 CTE_query_definition 包含一个子查询,则该子查询不能包括定义另一个 CTE 的嵌套的WITH子句。

不能在 CTE_query_definition 中使用以下子句:

COMPUTE 或 COMPUTE BY

ORDER BY(除非指定了 TOP 子句)

INTO

带有查询提示的 OPTION 子句

FOR XML

FOR BROWSE

(9)sql的用法扩展阅读

定义和使用递归 CTE 指南

下列指南适用于定义递归 CTE 的情况:

递归 CTE 定义至少必须包含两个 CTE 查询定义,一个定位点成员和一个递归成员。可以定义多个定位点成员和递归成员;但必须将所有定位点成员查询定义置于第一个递归成员定义之前。所有 CTE 查询定义都是定位点成员,但它们引用 CTE 本身时除外。

定位点成员必须与以下集合运算符之一结合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。在最后一个定位点成员和第一个递归成员之间,以及组合多个递归成员时,只能使用 UNION ALL 集合运算符。

定位点成员和递归成员中的列数必须一致。

递归成员中列的数据类型必须与定位点成员中相应列的数据类型一致。

递归成员的 FROM 子句只能引用一次 CTE expression_name。

在递归成员的 CTE_query_definition 中不允许出现下列项:

热点内容
des加密毕业论文 发布:2025-01-31 02:57:01 浏览:710
ip跨网段访问 发布:2025-01-31 02:44:42 浏览:708
算法带头人 发布:2025-01-31 02:42:25 浏览:551
方舟上传数据 发布:2025-01-31 02:42:25 浏览:835
铃木uy比uu多了什么配置 发布:2025-01-31 02:34:11 浏览:676
虾米音乐缓存文件夹 发布:2025-01-31 02:34:04 浏览:886
主播用什么我的世界启动器玩服务器 发布:2025-01-31 02:32:37 浏览:643
做电脑硬件需要哪些配置 发布:2025-01-31 02:30:53 浏览:439
小米智能门锁验证密码是多少 发布:2025-01-31 02:30:50 浏览:533
oracle和sql区别 发布:2025-01-31 02:27:40 浏览:241