【12】简单SQL语句

--------------------------------------------
-- SQL语句
--------------------------------------------
-- 数据定义语言(DDL)
-- 数据操作语言(DML)
-- 数据控制语言(DCL)


-- 简单的增删改查(CRUD)
-- 增加数据
-- insert into 表名(字段名, 字段名, ...) values(值1, 值2, ...);
insert into ConstraintExercise.StuInfo2
    (stuId, stuName, stuAge, stuSex, courseId) 
values
    -- (1, N'赵晓虎', 30, 'm', null);
    (1, N'赵晓虎', 30, 'm', NULL);
-- 查询数据(简写)
-- select 字段1, 字段2, ... from 表名;
select * from ConstraintExercise.StuInfo2;


insert into [ConstraintExercise].[StuInfo2]
    (stuId, stuName, stuAge, stuSex, courseId)
values
    (2, '牛亮亮', 35, 'f', NULL);

-- 修改数据
-- update 表名 set 字段=值,字段=值,... where 条件;
update ConstraintExercise.StuInfo2 set stuSex='m' where stuId=2;
update ConstraintExercise.StuInfo2 set stuName='牛亮亮' where stuId=2;

update ConstraintExercise.StuInfo2 set stuName=N'NULL';
update ConstraintExercise.StuInfo2 set stuName=NULL;

alter table ConstraintExercise.StuInfo2
drop constraint UQ_StuInfo2_stuName;

-- 删除数据
-- delete from 表 where 条件;
delete from ConstraintExercise.StuInfo2;


-- 二进制截断
insert into ConstraintExercise.StuInfo2(stuId, stuName) values(3, N'0123456789');

select * from  ConstraintExercise.StuInfo2

-- 删除
-- delete from 表 where 。。。
-- 删除数据库对象
--drop table 表
--drop database 数据库
--drop view 视图
--drop schema 架构

-------------------------------------------
-- 查询
-------------------------------------------
-- 查询的基本结构(烂熟)
-- 查询的详细步骤(烂熟)
-- 案例(举一反三)

-- 标准的SQL语句

select top | distinct
    字段
    , 表达式
    , 函数
    , 标量子查询
    , 常量
from
    数据源
where
    基本筛选
group by
    分组字段
having
    二次筛选
order by
    排序字段依据;

-- SQL语句的执行顺序
-- 
-- 获得数据源(from)
-- 进行第一次筛选(where)
-- 对筛选得到的结果进行分组(group by)
-- 可以对分组后的结果进行再删选一次(having)
-- 对所有数据进行整理(select)
-- 对结果进行排序(order by)


-- 添加一个分数表
go
    create schema Exercise authorization dbo;
go
create table Exercise.ScoreTbl
(
    scoreId        int identity(1,1) not null primary key,
    stuId        int not null,
    scoreNum     int check(scoreNum>=0 and scoreNum<=100),
    scoreLast    int check(scoreLast>=0 and scoreLast<=100),
    
    -- foreign key(stuId) references Exercise.StudentTbl(stuId)
);

-- 添加分数数据 2008+
insert into Exercise.ScoreTbl(stuId, scoreNum, scoreLast)
values(1,60,55),(2,75,40),(3,95,85),(5,86,75),(6,90,95);

insert into Exercise.ScoreTbl(stuId, scoreNum, scoreLast)
values(7, 45, 99)

select * from Exercise.ScoreTbl;

select
    *
    , scoreNum * .3 + scoreLast * .7
from
    Exercise.ScoreTbl
where
    scoreNum * .3 + scoreLast * .7 >= 60
    and
    scoreNum < 60;

-- 找姓牛的人
-- 单字符匹配    _
-- 多字符匹配    %
-- stuName like '牛%'

-- 引用对象的方式可以是
-- 服务器.数据库.架构.表
select * from TestDataBase..Student;
select * from TestDataBase..Course;
select * from TestDataBase..Score;

-- 叫纪明X
select * from TestDataBase..Student where stuName like '纪明%';

insert into TestDataBase..Student
(stuName, stuSex, stuBirthdate, stuStudydate, stuAddress, stuEmail, stuPhone, classId)
values
('纪明闪闪', 'm', '1990-1-1 00:00:00', '2014-7-7 17:04:52.123', N'上帝细节128号', 'jmss@jmss.com', '12345678909', 2);

-----------------------
-- [] [a-z] [^a-z]
-- stuName like '杨[中重]科'
-- 如果要匹配 asp_net
-- bookName like 'asp[_]net'

-- stuName like '%虎%'

-- age 在 19 到 26 岁
-- datediff(year, 开始的时间, 结束的时间)
select datediff(YEAR, stuBirthdate, CURRENT_TIMESTAMP),* from TestDataBase..Student
where
    stuSex = 'f'
    and
    -- datediff(YEAR, stuBirthdate, CURRENT_TIMESTAMP) between 19 and 26;
    datediff(YEAR, stuBirthdate, CURRENT_TIMESTAMP) in (19,26,23)



-------------------------
-- 空值处理
-------------------------
select * from ConstraintExercise.StuInfo2;

select * from ConstraintExercise.StuInfo2 where stuAge <> null;
-- SQL Server 采用三值逻辑 真 假 不知道

-- 判断为空使用 is null 或 is not null  再或 not(... is null)

select * from ConstraintExercise.StuInfo2 where stuAge is not null;

-- isnull(字段, 数据)
select *, isnull(stuAge, -1) from ConstraintExercise.StuInfo2;

 

posted @ 2017-12-31 22:24  LolitaGIS的笔记  阅读(261)  评论(0编辑  收藏  举报