SQL数据操作🌵

SQL数据操作🌵

🌟Select 基本语句格式:

SELECT [ALL | DISTINCT] <目标列表达式> [,<目标列表达式>]…

FROM <表名或视图名>[,<表名或视图名>]

[WHERE <条件表达式>]

[GROUP BY <列名1>[HAVING <条件表达式>]]

[[ORDER BY <列名2>[ASC | DESC]…]

简单查询

🍙基本的查询语句:

Select Sno,Sname

from S

where sex='男';

🍘使用AS可以给列和表重命名。

Select 学生表.sno as 学号, Sname as 姓名, Grade 成绩 //AS是可以省略的

from S 学生表,SC 课程表 //表也可以重命名

where 学生表.Sno=课程表.Sno and 学生表.SD='计算机'; //表重命名后,引用时一定要用 新名称、

连接查询

🍙检索选修课程名为“操作系统”的学生号和学生姓名:

Select S.Sno,Sname

from S,SC,C

where S.Sno=SC.Sno and SC.Cno=C.Cno and C.Cname='操作系统';

🍘检索至少选修了课程号为“C1”和“C3”的学生号:

Select Sno

from SC SC_X,SC SC_Y

where SC_X.Sno=SC_Y.Sno and SC_X.Cno='C1' and SC_Y.Cno='C3'

子查询

子查询也称嵌套查询。嵌套查询是指一个SELECT-FROM-WHERE查询块中可以嵌入另一个查询块之中。 在SQL中允许多重嵌套。

  • 🍽IN(在……集合中) | NOT IN(不在……集合中)

    🍙检索选修了课程号为'C1'的学生号和学生姓名:

    Select Sno,Sname

    from S

    where Sno IN (

    Select Sno

    from SC

    Where Cno='C1')

  • 🍽EXISTS(存在) | NOT EXISTS(不存在)

    🍘查询没有被任何同学选修的课程号和课程名

    Select Cno,Cname

    from C

    where NOT EXISTS (

    select *

    from SC

    where SC.Cno=C.Cno)

聚集函数

聚集函数是一个值的集合为输入,返回单个值的函数。

🌟SQL提供了5个预定义集函数:

  • 平均值AVG()

  • 最小值MIN()

  • 最大值MAX()

  • 求和SUM()

  • 计数COUNT()。

分组查询

  • GROUP BY 。 对元组进行分组,此时聚集函数只用于每个分组

    🍙查询每个Sno的Grade平均值

    Select Sno,AVG(Grade)

    from SC

    GROUP BY Sno;

  • HAVING。在分组前按照某种方式加上限制,使得不需要的分组为空。

    🍙查询每个Sno的Grade平均值大于85

    Select Sno,AVG(Grade)

    from SC

    GROUP BY Sno

    HAVING AVG(Grade)>85

字符串操作

字符串常用LIKE来进行匹配操作,模式是 区分大小写的。

  • “%”匹配任意长度字符串

  • “_”匹配任意一个字符。

🎁为了使模式中包含特殊字符,即%和_,允许使用ESCAPE关键词来定义转义符,LIKE语句后面紧 跟“ESCAPE''”表明转义符'' 后面的特殊字符为普通字符。

LIKE 'ab\%cd%'escape'' //匹配所有以ab%cd开头的字符串

LIKE 'ab\cd%'escape'' //匹配所有以ab\cd开头的字符串

集合操作

例:贷款(customer-no,loan-no) 存款(customer-no,account-no)

  1. UNION(并)、UNION ALL(不去掉重复行)

    查询在银行有贷款或者有存款的所有客户身份证号:

    select customer-no from 贷款

    union

    select customer-no from 存款;

  2. INTERSECT(交)

    查询在银行既有贷款又有存款的客户身份证号:

    select customer-no from 贷款

    intersect

    select customer-no from 存款

  3. EXCEPT(差)

    查询只在银行有贷款而没有存款的客户身份证号:

    select customer-no from 贷款

    except

    select customer-no from 存款

外连接

  1. LEFT JOIN(左外连接)

    SELECT S.Sno,Sname,SC.Cno,Grade

    FROM S

    LEFT JOIN SC

    ON S.Sno=SC.Sno;

  2. RIGHT JOIN(右外连接)

    SELECT S.Sno,Sname,SC.Cno,Grade

    FROM S

    RIGHT JOIN SC

    ON S.Sno=SC.Sno

  3. FULL JOIN(全外连接)

    SELECT S.Sno,Sname,SC.Cno,Grade

    FROM S

    FULL JOIN SC

    ON S.Sno=SC.Sno;

INSERT INTO语句

INSERT INTO 表名 VALUES (值1,值2…)

INSERT INTO 表名(列名1,列名2…) VALUES (值1,值2…)

DELETE语句

DELETE FROM 表名 WHERE 条件表达式

🎈注意:不同于DORP TABLE SC,DELETE只是删除表中的数据,但是关系模式仍然存在,表SC仍然存在于数据库中。

UPDATE语句

UPDATE 表名 SET 列名=新值 WHERE 条件表达

posted @ 2022-05-12 20:13  仙人掌掌掌掌  阅读(61)  评论(0)    收藏  举报