xml地图|网站地图|网站标签 [设为首页] [加入收藏]
当前位置: www8029com > 澳门新葡8522最新网站 > 正文

sql语句增删改查

时间:2019-12-03 04:18来源:澳门新葡8522最新网站
又自学,把SQL的一些常用语句复习了二遍。 收拾如下: 1增 1.1【插入单行】 insert [into] 表名 (列名) values (列值) 例:insert into Strdents (姓名,性别,出生辰期卡塔尔(英语:State of Qatar) valu

又自学,把SQL的一些常用语句复习了二遍。

收拾如下:

1增

1.1【插入单行】
insert [into] <表名> (列名) values (列值)
例:insert into Strdents (姓名,性别,出生辰期卡塔尔(英语:State of Qatar) values ('欢畅朋朋','男','1978/6/15'卡塔尔(قطر‎

1.2【将现有表数据增多到三个原来就有表】
insert into <本来就有个别新表> (列名卡塔尔 select <原表列名> from <原表名>
例:insert into tongxunlu ('姓名','地址','电子邮件'卡塔尔国
select name,address,email
from Strdents

1.3【直接拿现存表数据创设二个新表并填写】
select <新建表列名> into <新建表名> from <源表名>
例:select name,address,email into tongxunlu from strdents

1.4【使用union关键字合併数据开展插入多行】
insert <表名> <列名> select <列值> tnion select <列值>
例:insert Students (姓名,性别,出生辰期卡塔尔(قطر‎
select '欢喜朋朋','男','1979/6/15' union(union代表下风度翩翩行)
select '木色小明','男','19**/**/**'


2删

2.1【删除&lt;满足条件的&gt;行】  
delete from &lt;表名&gt; [where &lt;删除条件&gt;]  
例:delete from a where name='开心朋朋'(删除表a中列值为开心朋朋的行)


2.2【删除整个表】  
truncate table &lt;表名&gt;  
truncate table tongxunlu  
注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用语有外建约束引用的表

3改

update <表名> set <列名=更新值> [where <更新标准>]
例:update tongxunlu set 年龄=18 where 姓名='灰褐外号'

~~~~~~~

4查

4.1``精确(条件)查询
select <列名> from <表名> [where <查询条件发挥试>] [order by <排序的列名>[asc或desc]]

4.1.1【查询全体数据行和列】
例:select * from a
证实:查询a表中全部行和列

4.1.2【查询部分行列--条件查询】
例:select i,j,k from a where f=5
证实:查询表a中f=5的全体行,并显示i,j,k3列

4.1.3【在询问中应用AS纠正列名】
例:select name as 姓名 from a where xingbie='男'
表明:查询a表中性别为男的有着行,显示name列,并将name列改名称叫(姓名)彰显

4.1.4【查询空行】
例:select name from a where email is null
申明:查询表a中email为空的享有行,并体现name列;SQL语句中用is null可能is not null来剖断是不是为空行

4.1.5【在查询中应用常量】
例:select name, '唐山' as 地址 from Student
表明:查询表a,显示name列,并丰盛地址列,其列值都为'唐山'

4.1.6【查询重返限定行数(关键字:top percent卡塔尔】
例1:select top 6 name from a
注明:查询表a,展现列name的前6行,top为首要字
例2:select top 60 percent name from a
证实:查询表a,呈现列name的五分二,percent为第一字

4.1.7【查询排序(关键字:order by , asc , desc)】
例:select name
from a
where chengji>=60
order by desc
表达:查询a表中chengji大于等于60的具备行,并按降序突显name列;默感到ASC升序

4.2``混淆查询
4.2.1【使用like进行模糊查询】
潜心:like运算副只用于字符串,所以仅与char和varchar数据类型联合利用
例:select * from a where name like '赵%'
注解:查询呈现表a中,name字段第二个字为赵的笔录

4.2.2【使用between在有个别范围内开展查询】
例:select * from a where nianling between 18 and 20
证实:查询呈现表a中nianling在18到20之间的记录

4.2.3【使用in在罗列值内实行询问】
例:select name from a where address in ('北京','上海','唐山')
表明:查询表a中address值为首都也许北京抑或大庆的笔录,突显name字段

4.3``.分组查询
4.3.1【使用group by举行分组查询】
例:select studentID as 学员编号,AVG(score卡塔尔(英语:State of Qatar) as 平均战表(注释:这里的score是列名卡塔尔(英语:State of Qatar)
from score (注释:这里的score是表名)
group by studentID
证实:在表score中询问,按strdentID字段分组,展现strdentID字段和score字段的平均值;select语句中只允许被分组的列和为每种分组重回的叁个值的表明式,比方用三个列名作为参数的聚合函数

4.3.2【使用having子句进行分组挑选】
例:select studentID as 学员编号,AVG(score卡塔尔(قطر‎ as 平均成绩(注释:这里的score是列名卡塔尔(قطر‎
from score (注释:这里的score是表名)
group by studentID
having count(score)>1
表明:接上头例子,突显分组后count(score卡塔尔国>1的行,由于where只能在并未有分组时接纳,分组后不能不选取having来界定规范。

4.4``.多表联接查询

4.4.1内联接

4.4.1.1【在where子句中钦命联接条件】
例:select a.name,b.chengji
from a,b
where a.name=b.name
表明:查询表a和表b中name字段相等的笔录,并呈现表a中的name字段和表b中的chengji字段

4.4.1.2【在from子句中采纳join…on】
例:select a.name,b.chengji
from a inner join b
on (a.name=b.name)
说明:同上

4.4.2外联接

4.4.2.1【左外联接查询】
例:select s.name,c.courseID,c.score
from strdents as s
left outer join score as c
on s.scode=c.strdentID
注解:在strdents表和score表中询问满足on条件的行,条件为score表的strdentID与strdents表中的sconde相近

4.4.2.2【右外联接查询】
例:select s.name,c.courseID,c.score
from strdents as s
right outer join score as c
on s.scode=c.strdentID
证实:在strdents表和score表中查询满意on条件的行,条件为strdents表中的sconde与score表的strdentID相似

 

下文首要列举两张和三张表来说述多表连接查询。

新建两张表:

表1:student  截图如下:

图片 1

表2:course  截图如下:

图片 2
(那个时候那样建表只是为着演示连接SQL语句,当然实际开采中大家不会如此建表,实际费用中那多少个表会有投机不相同的主键。)

一、外连接

外接连可分为:左连接、右连接、完全外接连。

1、左连接  left join 或 left outer join

SQL语句:select * from student left join course on student.ID=course.ID

实践结果:

图片 3

左外连接包涵left join左表全部行,要是左表中某行在右表未有相配,则结果中对应行右表的有的全体为空(NULL卡塔尔(قطر‎.

注:那时候大家不可能说结果的行数等于左表数据的行数。当然这里查询结果的行数等于左表数据的行数,因为左右两表当时为后生可畏对生龙活虎涉及。

2、右连接  right join 或 right outer join

SQL语句:select * from student right join course on student.ID=course.ID

推行结果:

图片 4

右外连接包涵right join右表全体行,假设左表中某行在右表未有匹配,则结果中对应左表的有的全部为空(NULL卡塔尔(英语:State of Qatar)。

注:相像那时我们不能够说结果的行数等于右表的行数。当然这里查询结果的行数等于左表数据的行数,因为左右两表此时为生龙活虎对意气风发关系。

3、完全外连接  full join 或 full outer join

SQL语句:select * from student full join course on student.ID=course.ID

进行结果:

图片 5

一心外接连包蕴full join左右两表中存有的行,借使右表中某行在左表中绝非相配,则结果中对应行右表的大器晚成对全部为空(NULL卡塔尔(英语:State of Qatar),假设左表中某行在右表中从不相称,则结果中对应行左表的部分全部为空(NULL卡塔尔(قطر‎。

二、内连接  join 或 inner join

SQL语句:select * from student inner join course on student.ID=course.ID

实行结果:

图片 6

inner join 是相比运算符,只回去相符条件的行。

这时一定于:select * from student,course where student.ID=course.ID

三、交叉连接 cross join

1.定义:未有 WHERE 子句的时断时续联接将时有产生连接所提到的表的笛Carl积。第一个表的行数乘以第二个表的行数等于笛Carl积结果集的尺寸。

SQL语句:select * from student cross join course

实践结果:

图片 7

假诺大家在这里时给那条SQL加上WHERE子句的时候比如SQL:select * from student cross join course where student.ID=course.ID

这时候将回到切合条件的结果集,结果和inner join所示推行结果生机勃勃致。

四、两表关系为意气风发对多,多对生机勃勃或多对浓烈的总是语句

当然下面两表为风姿洒脱对黄金年代涉嫌,那么只要表A和表B为意气风发对多、多对后生可畏或多对多的时候,我们又该怎么样写连接SQL语句呢?

实际上两表生龙活虎对多的SQL语句和一定的SQL语句的写法都大约,只是查询的结果不平等,当然两表也要略有改变。

举例表1的列能够改为:

Sno Name Cno

表2的列能够改为:

Cno CName

那般两表就能够写生龙活虎对多和多对意气风发的SQL语句了,写法和下面的风流倜傥对大器晚成SQL语句相仿。

上边介绍一下当两表为多对多的时候我们该如何建表以致些SQL语句。

新建三表:

表A:  student 截图如下:

图片 8

表B:  course 截图如下:

图片 9

表C:  student_course 截图如下:

图片 10

三个学员能够采纳多门课程,一门课程能够被七个学子采取,因而学子表student和科目表course之间是多对多的涉嫌。

当两表为多对多涉及的时候,大家须要树立一个西路表student_course,中间表起码要有两表的主键,当然还足以有别的内容。

SQL语句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno

实行理并了结果:

图片 11

此条SQL执行的结果是学子选课的动静。

                                 接下来是另叁个例子!

方今留存轻巧的表(里面包车型地铁主键外键就不写了):

  1. Create table Employee(    EmpID int,    EmpName nvarchar(10),    DepID int);  
  2. Create table Department(  DepID int,    DepName nvarchar(10));  
  3. Create talbe Manager(     EmpID int,    DepID int);  

假若自个儿要查询部门的新闻,包括(部门ID,部门名称,部门高管,部门人数)。那要求多表连查和用到集合函数。

 

SQL语句如下:

 

  1. select D.DepID, DepName,E.EmpName ,G.Num   
  2. from t_Department as D   
  3. left join t_Manager as M   
  4. on M.DepID=D.DepID   
  5. left join t_Employee as E   
  6. on E.EmpID=M.ManagerID   
  7. left join   
  8. (select DepID,COUNT(*) as Num   
  9. from t_Employee   
  10. group by(DepID)   
  11. ) as G   
  12. on D.DepID=G.DepID;  

部门表<-->经理表<-->职工表

 

人口结果

八个结实总是便赢得结果

编辑:澳门新葡8522最新网站 本文来源:sql语句增删改查

关键词: www8029com