问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于SQL条件控制的知识你知道哪些?

发布网友 发布时间:2022-04-07 18:09

我来回答

6个回答

懂视网 时间:2022-04-07 22:30


           (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

                          (4)更新主键记录时,同样有级联更新和拒绝执行的选择。

exp:

CREATE TABLE student_course1(
    sno char (7) not null foreign key(sno)  references
                           student(sno) on delete  cascade,//这个就是级联删除
    cno char (5) not null foreign key(cno)  references
                           course(cno) on delete no action,//这个就是拒绝删除
    grade decimal(5,0) null check(grade>=0 and
                           grade<=100))//这里我介绍一下check,作用是用来限制你列的范围。

 

5.修改表的内容(这里不是指对表中的数据进行操作,而是表的属性):

添加或删除列(前提不是主键):

ALTER TABLE 表名 ADD 列名 类型 [NULL][,列名 类型 [NULL]…];//添加
ALTER TABLE 表名 DROP COLUMN列名;//删除

修改列的属性(前提不是主键):

ALTER TABLE表名 ALTER COLUMN 列名 类型 [NULL | NOT NULL] [,列名 类型 [NULL | NOT NULL]]…);

注意:一个列要改变成非空值(NOT NULL),要求该列当前不含有空值,如果不选择该项,其默认的值保持原有的值;若一个列要改变数据类型,则该列数据必须全为空值,否则不能改变。

增加主键:

alter TABLE  表名 add constraint pk_表名 primary key(这里是列的名字)

删除主键:

这个比较麻烦,先要把约束删掉,然后在删。

select * from sysobjects where xtype=‘PK‘这个是查当前的主键。

alter table 表名 drop constraint 主键的约束名就可以了。

删除表:

drop table 表名.

6.建立索引

索引好处是为了加快对数据的读取的,坏处是会增加额外的物理空间,数据改变的时候还要话时间对索引进行修改要花很多的时间。

添加索引:

CREATE [UNIQUE] {CLUSTERED|NONCLUSTERED} INDEX <索引名> ON <表名>(<列名1>[,<列名2>···])

删除索引:

DROP INDEX <表名>.<索引名1> [,<表名>.<索引名2>···]

exp:Create unique clustered index kh_ind on  course(cno);

Drop index course.kh_ind;

7.对sql表中的数据进行更新

 7.1数据的插入

 first:   INSERT [INTO] <表名>[(<列名1>,…,<列名n>)]  VALUES (<常量1>,…,<常量n>)

second:INSERT INTO <表名>[(<列名1>,…,<列名n>)]  子查询

7.2数据更新

UPDATE <表名>SET <列名1>=<表达式l> [,<列名2>=<表达式2>,…] [FROM <表名1>[,<表名2>,…]] [WHERE <条件>]

exp:  UPDATE student_courseSET  grade = 0 FROM  studentWHERE  dept =‘计算机系‘  and student.sno=student_course.sno

7.3数据删除

DELETE FROM <表名> [FROM <表名1>[,<表名2>,…]][WHERE 条件]

exp:  DELETE FROM student_courseWHERE grade is null


7.4数据查询
 SELECT <投影的字段列表>
        FROM <参与查询的表列表>
        [WHERE <查询选择的条件> ]
        [GROUP BY <分组表达式>]
                                 [HAVING<分组查询条件>]
        [ORDER BY <排序表达式> [ASC∣DESC ]]

exp:SELECT DISTINCT sname as 姓名,dept as 系名,
              year(getdate())-year(birthday) as 年龄
FROM student


7.5其他

介绍一下distinct这个是为了去重的。还有:SQL Server的通配符有以下几个:%代表任意多个字符。(下划线)代表单个字符。[ ]代表指定范围内的单个字符,[ ]中可以是单符,也可以是字符范围。[ ^]代表不在指定范围内的单个字符,[^ ]中可以是单个字符,也可以是字符范围。

这里有一篇将通配符很好的可以看一下:

点击打开链接


7.6集合

IN <值表>,  NOT IN <值表>使用这两个谓词

exp:SELECT Sname,Ssex
    FROM  Student
    WHERE Sdept IN ( ‘IS‘,‘MA‘,‘CS‘ );


7.7空值

is null , is not null不能用=取代is


7.8 order by

我的话就是用来给选定的集合排序的

exp:SELECT  *
        FROM  Student
        ORDER BY Sdept,Sage DESC;

聚集函数 :

计数
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
计算总和
SUM([DISTINCT|ALL] <列名>)    
 计算平均值
AVG([DISTINCT|ALL] <列名>)
最大最小值
      MAX([DISTINCT|ALL] <列名>)
     MIN([DISTINCT|ALL] <列名>)

7.9 group by

我的话就是用来分组的

exp:SELECT s#, AVG(score)
    FROM SC
    GROUP BY s#

having的作用是为了对聚集函数得到的进行筛选

exp:select sno
     from sc
    group by sno
    having count(*)>3

8.一些谓词

any,some,all

any的意思只要存在一个就可以满足,some和any差不多满足就行,all是全部满足

exp: SELECT Sname,Sage
    FROM    Student
    WHERE Sage < ANY (SELECT  Sage
                                         FROM    Student
                                         WHERE Sdept= ‘ CS ‘)
           AND Sdept <> ‘CS ‘ ; //这个符号是不等于的意思

9.连接

9.1内连接(也就是自然连接)

first:SELECT <投影的字段列表>
          FROM  <表1>  [INNER]  JOIN <表2>
          ON  <表1.列1> = <表2.列2>

second:SELECT <投影的字段列表>
           FROM  <表1> ,<表2>
           WHERE <表1.列1> =<表2.列2>

这是两种语法但是效果是一样的

exp:SELECT s.*
FROM  student s , student_course sc , course c
WHERE    s.sno=sc.sno
                  and sc.cno=c.cno
                  and c.cname=‘数据库原理及应用‘

9.2外连接(本质上还是用到了自然连接)

分为三种左外连接,右外连接,全外连接。

左外连接是对连接条件中左边的表不加限制,在右边增加万能行(全由空值组成);
右外连接是对连接条件中右边的表不加限制,在左边增加万能行(全由空值组成) ;
全外连接是对连接条件中的两个表都不加限制,在两边增加万能行(全由空值组成),所有两个表中的行都会包括在结果集中。

左外连接的语法为:
 SELECT <投影的字段列表>
 FROM  <表1>  LEFT  JOIN <表2>
                              ON  <表1.列1> = <表2.列2>
右外连接的语法为:
 SELECT <投影的字段列表>
 FROM  <表1>  RIGHT  JOIN <表2>
                              ON  <表1.列1> = <表2.列2>
全外连接的语法为:
 SELECT <投影的字段列表>
 FROM  <表1>  FULL  JOIN <表2>
                            ON  <表1.列1> = <表2.列2>

exp(右外连接):SELECT sno, student_course.cno,cname,grade
FROM  student_course  RIGHT JOIN course ON  student_course.cno=course.cno


9.3自连接(就是自己和自己连接)

exp:SELECT s1.sno, s1.sname,s2.sno,s2.sname
FROM  student  s1  JOIN student  s2  ON
              s1.sname=s2.sname
WHERE  s1.sno<s2.sno

9.4交叉连接(就是笛卡尔积的运算)

first :SELECT <投影的字段列表>
FROM  <表1>  CROSS  JOIN <表2>

second:SELECT <投影的字段列表>
FROM  <表1>, <表2>

10 exist量词

 使用存在量词EXISTS或NOT EXISTS后,若内层查询结果非空或空,则外层的WHERE子句返回真值,否则返回假值。

exp:SELECT DISTINCT sname
FROM  student
WHERE EXISTS
      ( SELECT * FROM student_course
        WHERE sno=student.sno and cno=‘10101‘ )

这里讲一下exist和in的区别,好像是exist的效率大于in的,相同的地方我感觉是差不多的使用起来(原谅我语文不好)

11合并结果集

 SELECT 语句1UNION  [ALL]SELECT 语句2

注意:(1)UNION中的每一个查询所涉及到的列必须在列数、顺序和类型上保持一致。(2)最后结果集中的列名来自第一个查询语句。(3)若UNION中包含ORDER BY子句,则将对最后的结果集排序。(4)默认将在结果集中删除重复的行,除非使用ALL关键字。


12.查询的时候建立新表

SELECT <投影的字段列表>INTO <新表>FROM <参与查询的表列表> [ WHERE <查询选择的条件> ][ GROUP BY <分组表达式> ] [ HAVING <分组查询条件> ]
 [ ORDER BY <排序表达式> [ ASC∣DESC ] ]
由于新表的结构由<投影的字段列表>定义,所以<投影的字段列表>中的每一列必须有名称,如果是一个表达式,则应该为其指定别名。





关于sql的一部分知识

标签:

热心网友 时间:2022-04-07 19:38

计算条件列表并返回多个可能结果表达式之一。

CASE 表达式有两种格式:

CASE 简单表达式,它通过将表达式与一组简单的表达式进行比较来确定结果。

CASE 搜索表达式,它通过计算一组布尔表达式来确定结果。

这两种格式都支持可选的 ELSE 参数。

CASE 可用于允许使用有效表达式的任意语句或子句。例如,可以在 SELECT、UPDATE、DELETE 和 SET 等语句以及 select_list、IN、WHERE、ORDER BY 和 HAVING 等子句中使用 CASE。

语法
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END

参数
input_expression
使用简单 CASE 格式时所计算的表达式。input_expression 是任意有效的表达式。

WHEN when_expression
使用简单 CASE 格式时要与 input_expression 进行比较的简单表达式。when_expression 是任意有效的表达式。input_expression 及每个 when_expression 的数据类型必须相同或必须是隐式转换的数据类型。

THEN result_expression
当 input_expression = when_expression 计算结果为 TRUE,或者 Boolean_expression 计算结果为 TRUE 时返回的表达式。result expression 是任意有效的表达式。

ELSE else_result_expression
比较运算计算结果不为 TRUE 时返回的表达式。如果忽略此参数且比较运算计算结果不为 TRUE,则 CASE 返回 NULL。else_result_expression 是任意有效的表达式。else_result_expression 及任何 result_expression 的数据类型必须相同或必须是隐式转换的数据类型。

WHEN Boolean_expression
使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。

希望回答对你有帮助

热心网友 时间:2022-04-07 20:56

case
when then ---当满足when 中的条件,则返回then中的内容,并跳出case 语句
when then
else ---所有when 条件都失败,则返回else中的内容
end
declare @a int set @a =90select case when @a <100 then '200' when @a <200 then '201' when @a >200 then '203' else '204' end ----此语句返回结果为 200请采纳,谢谢!

热心网友 时间:2022-04-07 22:31

case when 条件 then 条件为真时的值 else 条件为假时的值 end

case具有两种格式。简单case函数和case搜索函数。
--简单case函数
case sex
when '1' then '男'
when '2' then '女'
else '其他' end
--case搜索函数
case when sex = '1' then '男'
when sex = '2' then '女'
else '其他' end
这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些*,比如写判定式。
还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

--比如说,下面这段sql,你永远无法得到“第二类”这个结果
case when col_1 in ( 'a', 'b') then '第一类'
when col_1 in ('a') then '第二类'
else'其他' end

热心网友 时间:2022-04-08 00:22

Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些*,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
两者中可以根据不同的需求来选择

热心网友 时间:2022-04-08 02:30

可以当做java语言里面的switch来看待
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 座右铭幽默励志 经典搞笑座右铭 求搞笑的学习座右铭 搞笑哲理励志座右铭 农行信用卡金卡有年费吗?怎么申请 幽默励志的座右铭 2011经典人生格言 经典的爱情人生格言 经典的人生感悟格言 经典搞笑人生格言 幽默座右铭 农行信用卡金卡办理需要什么条件 如果一辈子不想要生孩子会怎么样 农行信用卡,金卡怎么办? 生什么劳什么成语 ()生()肉的成语是什么吗 关于(?生?死)的成语 家里有一个孩子和我没有血缘关系,出生证明写的是我的名字,导致我现在亲生孩子村委会不给开证明,怎么办 不生不灭,不垢不净,出自哪里?这句话有什么含义呢? 前女友生了我的孩子,我可以不去看她吗 我妈妈41岁被人贩子拐走之后在买家那边生了孩子现在回家了我要求我妈跟他们断绝关系我妈拒绝不答应 有助于骨肉生长吃什么好 红楼梦太虚幻境中的金陵十二钗的解文有什么寓意? 经典搞笑情侣的座右铭 搞笑但有道理的座右铭 求一霸气搞笑有哲理的座右铭~ 求一些座右铭奋斗高三,最好搞笑点的 搞笑的改变人生座右铭 最经典的座右铭!!1 求搞笑的座右铭 关于学习的搞笑又励志的座右铭。 求搞笑座右铭,急用!!! 一个原创的座右铭(有趣点、搞笑点) 以成长的故事为题800字作文 迅雷下载的视频,被删除了。垃圾箱也清空了。想还原,有什么方法么?_百 ... 作文《成长的故事》八百字 迅雷下载好的电影缓存文件被我删了,后来知道删了缓存就不能放了,有什么办法补救吗 难忘的成长故事、 作文 800字左右 谢谢~ 钢琴入门练什么曲子好? 求:作文《成长的故事》八百字 写一篇成长的故事,高中 800字作文、速求明天就要、谢谢 成长故事作文400 初学者简单钢琴曲