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表内容如下:
Date | Win |
2017-07-12 | 胜 |
2017-07-12 | 负 |
2017-07-15 | 胜 |
2017-07-15 | 负 |
如果要生成下列结果, 正确的sql语句是:( )
比赛日期 | 胜 | 负 |
2017-07-12 | 1 | 1 |
2017-07-15 | 1 | 1 |
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_id | Add_time |
11701245001 | 10000 | 1498882474 |
11701245002 | 10001 | 1498882475 |
表B:(仅列出部分数据作参考)
id | Order_id | goods_id | price |
1 | 11701245001 | 1001 | 10 |
2 | 11701245001 | 1002 | 20 |
3 | 11701245002 | 1001 | 10 |
问:用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'