--T_SQL :TRANSACTION _SQL (SQL SERVER 专有)
--PL_SQL: (ORACLE 特有)
--作用:
--标准sql+编程(逻辑)=t_sql
-- t_sql语法基础:
-- 变量:
--全局变量 (系统变量)了解
[email protected]@,系统定义,维护,赋值
-- 只读(使用)
--局部变量:用户自定义变量(*****)
-- @,由用户定义,赋值,使用
--1 声明declare
--c# int i=9
--declare @i int=10
--declare @a varchar(20),@j int
--2 赋值
declare @i int =0
declare @s1 varchar(20), @j int
set @i=85 --,@j=10 set1次给1个变量赋值
select @s1=‘jack‘,@i=10 --可以给多个变量赋值
--输出(测试)
-- print @s1 +‘的成绩是‘+ cast(@i as varchar(10))
select @s1 +‘的成绩是‘+ cast(@i as varchar(10))
--如何将查询结果赋值给变量
--判断员工的平均工资,如果>2000 输出‘工资达标‘
--否则输出‘工资太低‘
declare @avgSla money=0 --平均工资
--赋值
--注意:子查询查询结果不要超过1个,否则报错
--set @avgSla=(select AVG(sal) from EMP)
select @avgSla=AVG(sal)from EMP
--如果查询超过1个值,会将最后一个值赋给变量,不会报错
if(@avgSla>=2000)
print‘工资达标‘
else
print‘工资太低‘
--已知部门名称(变量),查询该部门员工将该部门员工信息显示出来.
declare @em nvarchar(20)
set @em=‘SALES‘
print @em+‘部门员工信息如下:‘
select EMPNO as 员工编号,ENAME as 姓名,JOB as 工作,MGR as 上级编号,HIREDATE as 入职时间,SAL as 薪资 from EMP,DEPT
where EMP.DEPTNO=DEPT.DEPTNO and [email protected]
控制语句:
if 语句
IF(条件)
BEGIN
--只有1条语句,begin end可以忽略
END
while 语句
WHILE (条件)
BEGIN
--循环体
end
--eg:1-100之间的数,求其中能被3整除的数的和,输出和.
declare @num int =1,@sum int=0
while (@num<=100)
begin
if(@num%3=0)
begin
set @[email protected]
end
set @num+=1
end
print ‘1-100能被3整除的数的和是:‘+cast(@sum as varchar(10))
--eg:涨工资,循环着涨,直到所有的员工工资都超过2000,每次涨200元.公司制度有工资上限:员工的工资上限是5000块
select * from EMP
declare @sal int=(select MIN(SAL) from EMP)
while(@sal<=2000)
begin
update EMP set SAL+=200
where SAL+200<=5000
end
select sal from EMP
--case end语句(面试题)
嵌套在select,update中 实现功能
语句:case
when 条件1 then 结果1
when 条件2 then 结果2
...
else 其他结果
end
--eg
select sname,sex=case
when sex=1 then‘男‘
when sex=0 then‘女‘
end from info
--面试题:
将info表中的sex 列的1改成0,0改成1.
update info set sex=case
when sex=1 then 0
when sex=0 then 1
end
select * from info
USE Practice
CREATE TABLE TEMP
(
SJ DATETIME,
RE VARCHAR(10)
)
INSERT INTO TEMP VALUES
(‘2015-5-9‘,‘胜‘),
(‘2015-5-9‘,‘负‘),
(‘2015-5-10‘,‘胜‘),
(‘2015-5-10‘,‘负‘),
(‘2015-5-10‘,‘负‘)
SELECT * FROM TEMP
SELECT SJ,SUM(CASE WHEN RE=‘胜‘ THEN 1 ELSE 0 END)AS‘胜‘,
SUM(CASE WHEN RE=‘胜‘THEN 0 ELSE 1 END)AS ‘负‘
FROM TEMP
GROUP BY SJ
create table kechengtb
(
techID int ,
[week] nvarchar(20),
isClass nvarchar(10)
)
insert into kechengtb values
(1,‘2‘,‘有‘),
(1,‘3‘,‘有‘),
(2,‘1‘,‘有‘),
(3,‘2‘,‘有‘),
(1,‘2‘,‘有‘)
select techID as 教师号,
sum(CASE WHEN week=1 then 1 else null end)as 星期一,
sum(CASE WHEN week=2 then 1 else null end)as 星期二,
sum(CASE WHEN week=3 then 1 else null end)as 星期三
from kechengtb
group by techID