数据库知识点

SQL语言类:

(1)数据查询语言(DQL):是由SELECT子句,FROM子句,WHERE子句组成的查询块

(2)数据操纵语言(DML): SELECT(查询) INSERT(插入) UPDATE(更新) DELETE(删除)

(3)数据定义语言(DDL):CREATE(创建数据库或表或索引)ALTER(修改表或者数据库)DROP(删除表或索引)

(4)数据控制语言(DCL):GRANT(赋予用户权限) REVOKE(收回权限) DENY(禁止权限)

(5)事务控制语言(TCL):SAVEPOINT (设置保存点)ROLLBACK (回滚) COMMIT(提交)

比赛结果result表内容如下:

DateWin
2017-07-12 
2017-07-12  
2017-07-15
2017-07-15 


如果要生成下列结果, 正确的sql语句是:(      )

比赛日期
2017-07-12 11
2017-07-1511
select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 
from result 
group by Date

case ... when ... then ... else ... end

group by

使用了group by子句以后,SELECT 子句中的元素有严格的限制。

实际上,使用group by时,SELECT 子句中只能存在以下三种元素:

1. 常数

2. 聚合函数

3. GROUP BY子句中指定的列名(也就是聚合键)

group和select是一对一的关系

这里主要介绍几个固定数据库角色

db_accessadmin:为windows登录名、windows组和sqlserver登录名添加或删除数据库访问权限
db_backupoperator:备份数据库
db_datareader:从所有用户表中读取所有数据权限
db datawriter:在所有用户表中添加、删除或更改数据
dbddladnin:在数据库中运行任何DDL命令权限
db_denydatareader:不能读取数据库内用户表中的任何数据

db_denydatawriter:不能添加、修改或删除数据库内用户表中的任何数据
db_owner:可以执行数据库所有配署和维护活动,还可以删除数据库
dbsecurityadmin:修改角色成员身份和管理权限,向此角色中添加主体可能或导致意外的权限升级
public:在SOL Server 2008中每个数据库用户都属于public数据库角色。当尚未对某个用户授予或者拒绝对安全对象的特定权限时,这该用户将据称授予该安全对象的public角色的权限,这个数据库角色不能被删除

运动会比赛信息的数据库,有如下三个表:

运动员ATHLETE(运动员编号 Ano,姓名Aname,性别Asex,所属系名 Adep),

项目 ITEM (项目编号Ino,名称Iname,比赛地点Ilocation),

成绩SCORE (运动员编号Ano,项目编号Ino,积分Score)。
写出目前总积分最高的系名及其积分,SQL语句实现正确的是:(      )

SELECT Adep,SUM(Score)
FROM ATHLETE,SCORE  
WHERE ATHLETE.Ano=SCORE.Ano 
GROUP BY Adep  
HAVING SUM(Score)>=ALL(SELECT SUM(Score) FROM ATHLETE,SCORE  WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep)

用于子查询的any 是任意一个 
all 是所有

any表示有任何一个满足就返回true,all表示全部都满足才返回true 

雇员表EMP 结构如下

(  雇员编号 EMPNO ,   姓名 ENAME ,
工作岗位 JOB ,  管理员编号 MGR ,
受雇时间 HIREDATE ,  工资 SAL ,
奖金 COMM ,  部门编号 DEPTNO );
下列操作语句正确的是:(      )

显示在10和30部门工作并且工资大于5500元的雇员的姓名和工资,列标题显示为Employee和Monthly Salary 语句:SELECT ENAME EMPLOYEE ,SAL “MONTHLY SALARY” FROM EMP WHERE DEPTNO IN(10,30)AND SAL>5500;

显示受雇时间在2010年1月1日和2012年12月31日之间的雇员的姓名、工资、及受雇时间,并以受雇时间升序排列。 语句:SELECT ENAME,SAL,HIREDATE FROM EMP WHERE HIREDATE BETWEEN ‘2010-01-01’ AND ‘2012-12-31’ ORDER BY HIREDATE;(短日期默认time为00:00:00 因此查询日期只能截止到2012-12-31 00:00:00 并没有当天的记录)

显示奖金比工资多10%以上的雇员的姓名、工资及奖金。 语句:SELECT ENAME,SAL ,COMM FROM EMP WHERE COMM>SAL*1.1;(1、《民法通则》第一百五十五条规定: 民法所称的“以上”、“以下”、“以内”、“届满”,包括本数;所称的“不满”、“以外”,不包括本数;
2、《中华人民共和国刑法》第九十九条:本法所称以上、以下、以内,包括本数。
3、对文中“以上”“以下”的语义范围进行总括说明,例如:本办法所称“不足”“不超过”“不满”均不含本级,“以上”均含本级。
4、《中华人民共和国刑法》第九十九条:本法所称以上、以下、以内,包括本数。比如“两年以上”中的“两年”即为本数。本数,就是所称之数,本位之数,参照之数,如:1000元以上,其中1000即是本位之数,所称之数,是参照之数。)

sql语句中

1、处理效率:drop>trustcate>delete

2、drop删除整个表;trustcate删除全部记录,但不删除表;delete删除部分记录

3、delete不影响所用extent,高水线保持原位置不动;trustcate会将高水线复位。

有两张表,如下图所示

表A(仅列出部分数据作参考)

Order_id User_idAdd_time
11701245001100001498882474
11701245002100011498882475

表B:(仅列出部分数据作参考)

idOrder_idgoods_idprice
111701245001100110
211701245001100220
311701245002100110

问:用SQL查询 购买过goods_id 为1001的用户user_id()

select a.user_id 
from A a,B b 
where a.order_id=b.order_id and b.goods_id='1001'
select user_id 
from A 
where order_id in (select order_id 
                   from B 
                   where goods_id = '1001')
Select A.user_id 
from A 
left join B 
on A.order_id=B.order_id 
where B.goods_id='1001'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值