一、 新建表
二、 基本的增删改查
三、 模糊查询
四、 判断空值
五、 取反关键词not
六、 关键词or
七、 关键词and
八、 关键词and 和 or的优先级(and优先级更高)
九、 分组查询
十、 逻辑运算
十一、 多包含关键词in
十二、 区间关键词between and
十三、 排序
十四、 select 计算方法
十五、 列的别名
十六、 数据统计(汇总,聚合)
十七、 字符串函数
十八、 日期函数
十九、 关键词top
二十、 表之间的链接
二十一、 子查询
一、新建表
--创建一个表名是hao123,主键是id且自动增长,有姓名和时间列的表。
create table hao123(
id int primary key identity(1,1),
name varchar(50),
time date
)
--创建一个表名是hao123,主键是id且不自动增长,有姓名和时间列的表。
create table hao123(
id int PRIMARY KEY clustered,
name varchar(50),
time date
)
二、基本的增删改查
--新增一条完整的信息。
--insert into Table_1 values(1,'张三')
--新增一条不完整的信息。
--insert into Table_1(学号)values(2)
--根据条件删除信息。
delete from Table_1 where 学号=2
--删除表中所有信息。
delete Table_1
--根据条件修改信息。
update Table_1 set 姓名='李四' where 学号=1
update student set stu_name='李四',stu_sex='女' where stu_id=1
--修改整列信息。
update Table_1 set 姓名='李四'
--查询表中的指定列的信息
select 学号 from Table_1
--查询数据库中的所有信息。
select * from Table_1
三、模糊查询
--查询表中姓名包含李的信息。
select * from Table_1 where 姓名 like '%李%'
--查询表中姓名开头为李的信息。
select * from Table_1 where 姓名 like '李%'
--查询表中姓名开头为李,且名只有一个字符的信息。
select * from Table_1 where 姓名 like '李_'
四、判断空值
--查询姓名为空的信息。
select * from Table_1 where 姓名 is null
五、取反关键词not
--查询姓名不为空的信息。
select * from Table_1 where not(姓名 is null)
六、关键词or
--查询年龄是30和40的人的信息。
select * from Table_1 where 年龄=30 or 年龄=40
七、关键词and
--查询表中年龄为40,并且地址为湖南的信息。
select * from Table_1 where 年龄=40 and 地址='湖南'
八、关键词and 和 or的优先级(and优先级更高)
--查询表中年龄为40和姓名是张三并且年龄是30的信息。
select * from Table_1 where 年龄=40 or 姓名='张三' and 年龄=30
九、分组查询(group by)
--查询姓名重复出现的次数。
select 姓名,COUNT(姓名) 次数 from Table_1 group by 姓名
--查询姓名重复的信息,并返回次数。
select 姓名 ,COUNT(姓名) 次数 from Table_1 group by 姓名 having count(姓名)> 1
--删除姓名重复的信息保留一条。
delete from Table_1 where 姓名 in (select 姓名 from (select 姓名 from Table_1 group by 姓名 having count(姓名)> 1 ) a) and id not in(select * from(select MIN(id) ID from Table_1 group by 姓名 having COUNT(姓名)>1 ) b)
十、逻辑运算
--查询学生表中id大于3的数据
select * from student where id>3
--查询学生表中id小于3的数据
select * from student where id<3
--查询学生表中id等于3的数据
select * from student where id=3
十一、多包含关键词in
--查询姓名为张三和李四的信息。
select * from student where stu_name in('张三','李四')
--查询姓名不为张三的信息。
select * from student where stu_name not in ('张三')
十二、区间关键词between and
--查询学号在3到7之间的信息。
select * from student where stu_id between 3 and 7
十三、order by排序
--根据学生id降序排序。
select * from student order by stu_id desc
--根据学生id升序排序。
select * from student order by stu_id asc
select * from student order by stu_id
十四、select 计算方法
select 1+1 as 结果
select 1+2 结果
select 结果=9+3
十五、列的别名
--合并姓列名列,返回详细信息
select 姓名=姓+名 ,* from student
select 姓+名 as 姓名 ,* from student
select 姓+名 姓名 ,* from student
--新增一列建表人
select '横扫千军' as 签字,* from student
select '横扫千军' 签字,* from student
select 签字 = '横扫千军',* from student
十六、数据统计(汇总,聚合)
--根据姓名查询总人数
select 总数人=count(姓+名) from student
--查询总销量
select 总销量=sum(销量) from student
--查询最大年龄
select 最大年龄=max(ages) from student
--查询最小年龄
select 最小年龄=min(ages) from student
--查询平均年龄
select 平均年龄=avg(ages) from student
十七、字符串函数
--获取字符串长度。
select len('张三') 长度
--从字符串左边截取2个字符。
select LEFT('当我第一次','2') 返回值
--从字符串右边截取2个字符。
select RIGHT('当我第一次','2') 返回值
--从字符串左边第2个开始(包含第二位),截取3个字符。
select SUBSTRING('当我第一次看到你的时候',2,3) 返回值
--替换字符串。
select replace('当我第一次看到你的时候','一','二') 返回值
--删除字符串abcdefg中间的cd。
select REPLACE('abcdefg','cd','')
--将字符串abcdef从第2位开始删除3个字符。
select REPLACE('abcdef',SUBSTRING('abcdef',2,3),'') 返回值
--将大写字母变为小写字母。
select LOWER('ABC') 返回值
--将小写字母变成大写字母。
select UPPER('ABC') 返回值
--将字符串颠倒。
select REVERSE('abc') 返回值
--删除字符串左边的空格。
select LTRIM(' 张三') 返回值
--删除字符串右边的空格。
select RTRIM('张三 ') 返回值
十八、日期函数
--获取系统当前时间。
select GETDATE()
--以字符串格式获取当前的年月日。
select DATENAME(YY,GETDATE())+'-'+DATENAME(MM,GETDATE())+'-'+DATENAME(DD,GETDATE()) 当前日期
--以int型获取当前年份。
select DATEPART(YY,GETDATE()) 当前年份
--返回十天以后的时间。
select DATEADD(DD,10,GETDATE())
--返回十天前的时间。
select DATEADD(DD,-10,GETDATE())
--返回两个时间之间相差的天数。
select DATEDIFF(DD,'2016-1-1','2017-1-1')
--查询指定日期的订单总额。
select SUM(订单小计.小计) 总额 from 订单 inner join 订单小计 on 订单.订单ID=订单小计.订单ID where CONVERT(varchar(30),订购日期,23)='1996-07-04'
十九、关键词top
--查询语文成绩前三名的信息。
select top 3 stu_id ,stu_yuwen 语文 from student2 order by stu_yuwen desc
--查询语文成绩最后三名的信息。
select top 3 stu_id , stu_yuwen 语文 from student2 order by stu_yuwen asc
二十、表之间的链接
--双表内链接。
select * from student inner join student2 on student2.stu_id=student.stuID
SELECT * FROM table1,table2 WHERE table_id=table2.id
--双表左链接。
select * from student left join student2 on student2.stu_id=student.stuID
--双表右链接。
select * from student right join student2 on student2.stu_id=student.stuID
--双表完全链接。
select * from student full join student2 on student.stuID=student2.stu_id
二十一、子查询
--查询成绩最高的学生的姓名。
select stu_name from student where fenshu=(select max(fenshu) from student)
--查询表中小于平均年龄的学生姓名。
select stu_name from student where stu_ages<(select AVG(stu_ages) from student)
二十二、where、group up、having关键词比较
--显示1601班的学生数量。
select 人数=COUNT(*) from student group by stu_class having stu_class=1601
二十三、convert关键词
--查询某一天的交易量。
select COUNT(id) from 订单 where CONVERT(varchar(30),订购日期,23)='1999-9-9'
--查询某秒的交易量。
select COUNT(id) from 订单 where CONVERT(varchar(30),订购日期,120)='1999-9-9'
二十四、case、when、then关键词
--条件求和。
select SUM(case type when 2 then balance else 0 end) from update_information
二十五、关键词alter
--在Table_1中增加一列。
alter table Table_1 add sex char(20) null
二十六、外键约束
--创建两个表之间的外键约束(一对多关系中,一的一方是父表,多的一端是子表 ,即引用外键的是子表,被引用的是父表。父表又叫做主表,子表又叫做从表。)
ALTER TABLE 子表 ADD CONSTRAINT 父表字段名 FOREIGN KEY (子表字段名) REFERENCES 父表(字段名);
alter table orders add constraint id foreign key (o_id) references user(id);
--暂停外键约束
SET FOREIGN_KEY_CHECKS=0
SELECT * FROM customer
SELECT * FROM db_dictionary
ALTER TABLE 子表 ADD CONSTRAINT 父表字段名 FOREIGN KEY (子表字段名) REFERENCES 父表(字段名);
ALTER TABLE customer ADD CONSTRAINT id FOREIGN KEY (`level`) REFERENCES db_dictionary(id)