SQL SEVER Select语句

数据查询

单表查询

无条件查询

查询一个或多个属性,AS关键字

  • 查询一个或多个属性,u_name,u_age,u_score:

  • 使用AS给查询结果取别名(AS也可以省略):

SELECT  u_name as 名字, u_age as "年龄" ,  
        u_score as成绩 
FROM T_USER ;
  • 查询全部值

SELECT  *
FROM T_USER ;

算数运算符

  • SELECT中可以对数字和日期进行加减乘除运算

select u_name , u_score , u_score+10 , u_score-10 ,        u_score*2 , u_score/2 
from T_USER ;

连接符 “||”

  • SQL中的连接符”||” 可将结果连接起来为一列

  • 将u_name 和“的成绩为” u_score 连接起来

select u_name || '的成绩为' || u_score as 成绩
from T_USER ;

去除重复值

  • SQL中使用DISTINCT关键字 (系统默认不去除:ALL)

select distinct Sno
from SC;

日期函数

  • 取当前时间

select getdate()
  • 返回date_expression中的日期值

day(date_expression)
  • 返回date_expression中的月份值

year(date_expression)
  • 返回date_expression中的年份值

month(date_expression)
  • 取时间字段的季度值

datepart(qq,date_expression)
  • 返回两个指定日期在date part 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。

  • 与当前日期的年份差

DATEDIFF(yy,createtime,getdate())
DATEDIFF(yy,date1,date2)

日期部分     缩写 
​
年份       yy、yyyy 
​
季度       qq、q 
​
月份       mm、m 
​
每年的某一日   dy、y 
​
日期       dd、d 
​
星期       wk、ww 
​
工作日*     dw
​
小时       hh 
​
分钟       mi、n 
​
秒        ss、s 
​
毫秒       ms

条件查询 WHERE

比较运算 ‘<’ ‘<=’ ‘>’ ‘>=’ ‘!=’

  • SQL中可以使用 条件运算符 ‘<’ ‘<=’ ‘>’ ‘>=’ ‘!=’ 过滤查询结果中的某些行,多个条件之间可以用 ‘and’ 连接。

  • 查询T_USER表中成绩大于等于60分的学生

select u_name , u_score
from T_USER 
where u_score >= 60 ;

与条件 (AND,BETWEEN)

  • 查询A-B区间

  • 查询T_USER表中成绩大于等于60分且小于等于80分的学生

  • AND写法

select u_name , u_score
from T_USER 
where u_score >60 and u_score <80
  • BETWEEN写法

select u_name , u_score
from T_USER 
where u_score between 60 and 80 ;

或条件(OR,IN)

  • SQL中用于或运算的关键字OR和IN

  • 查询分数大于90分或者小于60分的记录-OR

select u_name , u_score
from T_USER 
where u_score >90 or u_score <60 ;
  • 查询成绩为100,98,65的学生-IN

select u_name , u_score
from T_USER 
where u_score in(100,98,65) ;

非条件(!=,NOT)

  • 查询名字不叫 ‘叶清逸’ 的记录

  • !=写法

select *
from T_USER 
where u_name != '叶清逸' ;
  • NOT写法

select *
from T_USER 
where u_name not like '叶清逸' ;

空或非空( IS NULL, IS NOT NULL)

  • 空值

select *
from T_USER 
where u_name is null ;
  • 非空值

select *
from T_USER 
where u_name is not null ;

模糊查询 LIKE

  • SQL中可以使用模糊查询like,其中 ‘_’ 占一位 ‘%’占多位。

  • 查询名字中有 ‘清’ 字的记录

  • 可以有三种表示方式,结果等价

    1. 包含’清’: %清%

    2. 第二位为’清’:_清%

    3. 倒数第二位为’清’:%清_

select *
from T_USER 
where u_name like '%清%' ;

查询排序 ORDER BY

  • SQL中可以对查询结果进行排序

  • DESC 表示按从大到小排序

  • ASC 表示按从小到大排序,默认为从小到大排序。

  • 将T_USER表按成绩从大到小排序

select *
from T_USER 
order by u_score desc ;

ORDER BY 语句也可以用逗号隔开,表示如果上一个条件相同,接下来的排序方式。

select *
from T_USER 
order by a_score desc ,order by b_score asc;

聚集函数(总数 最大 最小 平均)

  • 统计个数:count

  • 平均值:avg

  • 最小值:min

  • 最大值:max

  • 总和:sum

  • 有时在计算聚集函数前必须先去重,如果确实想去除重复项,可在聚集表达式中使用关键字distinct。

  • 聚集函数只能用在select列表和having子句中

select count(*)
from course;
​
select min(distinct id)
from course;
​
select sum(distinct socer)
from course;

分组聚集 GROUP BY

  • 求各个课程号及相应的选课人数

select Cno,count(Sno)
from SC
group by Cno;

表名:user_profile

  • 求每个学校的最低gpa

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

  • 错误代码示范:

select device_id,university,min(gpa)
from user_profile
group by university
  • 正确解法之一:

select device_id,university,gpa
from user_profile
where (university,gpa) in (select university,min(gpa)                          from user_profile 
                           group by university)
order by university

分组聚集 HAVING

  • HAVING短语作用于组

  • 查询平均成绩大于90分的学生学号和平均成绩

select Sno,AVG(Grade)
from SC
group by Sno
having AVG(Grade)>=90;

多表查询

数据更新

插入元组(行)

INSERT

Into <表名> [(<属性列1><属性列2><属性列3><属性列4>)]

Values(<常量1><常量2><常量3><常量4>);

  • 将学生张三信息插入学生表Student当中(原表属性顺序:学号,姓名,性别,年龄,所在院系)

Insert
Into Student
Values (‘20205831’,’张三’,’男’,’18’,’CS’);
  • 将一个新元组(学号:20205830,姓名:李东,性别:男,所在系列IS,年龄18)插入学生表Student中

  • 在新增元组中指定了哪些属性要赋值,属性顺序可以不与create table 相同,但是后面赋值一定要与自己指定的属性一一对应。

Insert
Into Student(Sno,Sname,Ssex,Sdept,Sage)
Values (‘20205830’,’李东’,’男’,’IS’,’18’);

指出赋值属性时,若只插入部分列属性,则其他列属性自动赋予空值

Insert
into SC (Sno,Cno)                   
Values (‘20205832’,’1’);

没有指出赋值属性,需在其他属性上明确的赋值NUL

Insert
into SC
Values (‘20205832’,’1’,’NULL’);

插入子查询结果

Insert

Into <表名> [(<属性列1><属性列2><属性列3><属性列4>)]

子查询;

  • 对每一个系,求学生平均年龄,并把结果放入数据库中

  • 首先在数据库中建立一个新表,其中一列放系名,另一列放平均年龄

Create table Dept_age
(Sdept char(15),Avg_age smallint);
  • 然后对表Student按系分组,再把系名和平均年龄存入新表中

Insert
Into Dwpt_age(Sdept,Avg_age)
Select Sdept,AVG(Sage)
From Student
Group by Sdept;

数据修改(更新)

Update <表名>

Set <列名>=<表达式>[,<列名>=<表达式>]

[Where <条件>]

修改一个元组的值

  • 将学生201215121的年龄改成22岁

Update student
Set Sage=22
Where Sno=’201215121’;

带子查询的修改语句

  • 将计算机系全体学生成绩归0

Update SC
Set grade=0
Where Sno(select Son
          from Student
          Where Sdept=’CS’);

删除数据

Delete

From<表名>

[where <条件>]

  • 功能从指定表中删除满足where子句条件的所有元组,如果没有where则删除表中的所有数据

  • 删除学号201215128的学生记录

Delete
From Student
Where Sno=’201215128’;

视图

创建视图

CREATE VIEW <视图名> [(<列名> [,<列名>]…)]

AS

<子查询>

[WITH CHECK OPTION];

  • 建视图的语句,就是在完整的SELECT语句前,增加“CREATE VIEW 视图名 AS”。

  • 建立信息系学生的视图

CREATE VIEW IS_Student 
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
  • 建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生

  • 定义IS_Student视图时加上了WITH CHECK OPTION子句,对该视图进行插入、修改和删除操作时,RDBMS会自动加上Sdept=‘IS’的条件。

CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
WITH CHECK OPTION;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值