html5提供的api有牛客,SQL学习笔记[牛客专项练习]

1.CHARINDEX()

The CHARINDEX() function searches for a substring in a string, and returns the position. If the substring is not found, this function returns 0.html

SELECT CHARINDEX(‘t’, ‘Customer’) AS MatchPosition;

4web

2.SQL执行顺序

from

where

group by

having

select

order bysql

3.DROP、DELETE、TRUNCATE

drop彻底删除表,包括表结构

delete是删除表数据,保留表的结构,并且能够加where,只删除一行或者多行

truncate 只能删除表数据,会保留表结构,并且不能加where数据库

处理效率:drop > truncate> delete,论清理表数据的速度,truncate通常比delete更快

delete不影响所用extent,高水线保持原位置不动;truncate会将高水线复位app

4. 有一张学生成绩表sc(sno 学号,class 课程,score 成绩),请查询出每一个学生的英语、数学的成绩(行转列,一个学生只有一行记录)

法一:svg

SELECT

sno,

CASE

WHEN class = 'english' THEN score

ELSE 0

END,

CASE

WHEN class = 'math' THEN score

ELSE 0

END

FROM

sc

WHERE

class IN ('english' , 'math')

GROUP BY sno;

法二:this

SELECT

sno,

SUM(IF(class = 'english', score, 0)) AS english,

SUM(IF(class = 'math', score, 0)) AS math

FROM

sc

WHERE

class IN ('english' , 'math')

GROUP BY sno

5.

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

运动员ATHLETE(运动员编号 Ano,姓名Aname,性别Asex,所属系名 Adep), 项目 ITEM (项目编号Ino,名称Iname,比赛地点Ilocation), 成绩SCORE (运动员编号Ano,项目编号Ino,积分Score)。

写出目前总积分最高的系名及其积分,SQL语句实现正确的是:spa

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)

All:对全部数据都知足条件,整个条件才成立;

Any:只要有一条数据知足条件,整个条件成立;

Some的做用和Any同样 .code

6.

有一个名为app的MySQL数据库表

当前表中数据记录以下,一条记录表示某个应用的某个版本的下载量记录:xml

app_id

version_code

download_count

1

10

90

1

11

100

1

10

20

2

15

10

2

16

15

2

17

30

2

16

5

3

2

50

查出每一个应用中总下载量最大的版本号和次数

SELECT

t.app_id, t.version_code, MAX(t.download_sum)

FROM

(SELECT

app_id, version_code, SUM(download_count) download_sum

FROM

app

GROUP BY app_id , version_code

ORDER BY download_sum DESC) AS t

GROUP BY t.app_id;

7.

雇员表EMP 结构以下

( 雇员编号 EMPNO , 姓名 ENAME ,

工做岗位 JOB , 管理员编号 MGR ,

受雇时间 HIREDATE , 工资 SAL ,

奖金 COMM , 部门编号 DEPTNO );

下列操做语句正确的是:( )

正确答案: A

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

B. 显示受雇时间在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;

C. 显示奖金比工资多10%以上的雇员的姓名、工资及奖金。 语句:SELECT ENAME,SAL ,COMM FROM EMP WHERE COMM>SAL*1.1;

D.查询没有奖金且工资低于6500并工做岗位是经理、普通员工、销售员的全部员工信息。 语句:SELECT * FROM EMP WHERE SAL<6500 AND COMM IS NULL AND JOB IN (‘经理’,‘普通员工’,‘销售员’);

B:短日期类型默认Time为00:00:00,应改成

HIREDATE BETWEEN '2010-01-01' AND '2013-01-01'

C:

D: 没有奖金(=0)≠ \ne​=奖金是NULL

8.

积分result表中有A B C D四列,要求:

1)当A列值大于等于B列时,选择A列不然选择B列

2)当C列值大于等于D列时,选择C列不然选择D列

用SQL语句实现正确的是:

SELECT

(CASE

WHEN A > B THEN A

ELSE B

END) MAX_AB,

(CASE

WHEN C > D THEN C

ELSE D

END) MAX_CD

FROM

result

9.

请取出 BORROW表中日期(RDATE字段)为当天的全部记录?(RDATE字段为datetime型,包含日期与时间)。

SELECT

*

FROM

BORROW

WHERE

DATEDIFF(dd, RDATE, GETDATE()) = 0

10.

DDL(Data Definition Language)数据库定义语言

DDL不须要commit. eg. CREATE ALTER DROP TRUNCATE COMMENT RENAME

DML(Data Manipulation Language)数据操纵语言

DML须要commit. eg. SELECT INSERT UPDATE DELETE MERGE CALL EXPLAIN PLAN LOCK TABLE

DCL(Data Control Language)数据库控制语言 受权,角色控制等

GRANT 受权, REVOKE 取消受权

TCL(Transaction Control Language)事务控制语言

SAVEPOINT 设置保存点, ROLLBACK 回滚, SET TRANSACTION

11.

INSERT INTO 语句用于向表格中插入新的行

INSERT INTO table_name (column1, column2, column3, …)

VALUES (value1, value2, value3, …);

SELECT INTO 语句从一个表中选取数据,而后把数据插入另外一个表中。经常使用于建立表的备份复件或者用于对记录进行存档。

把全部的列插入新表:

SELECT *

INTO new_table_name [IN externaldatabase]

FROM old_tablename

只把但愿的列插入新表:

SELECT column_name(s)

INTO new_table_name [IN externaldatabase]

FROM old_tablename

eg:

SELECT

*

INTO seniordrivers FROM

drivers

WHERE

drivedistanced >= 5000

12.

alter table 表名 alter column 字段名 set default 默认值;

eg: 修改表test_tbl字段i的缺省值为1000

ALTER TABLE test_tbl ALTER i SET DEFAULT 1000;

13. having vs where

having子句必须于group by 子句同时使用,不能单独使用

where子句 = 指定行所对应的条件

having子句 = 指定组所对应的条件

group by的做用是限制分组条件,having是对group by中分出来的组进行条件筛选。因此用having就必定要和group by连用,且是先group by XXX 再having XX

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值