黑马程序员之SQL学习笔记:数据库基础知识点学习总结

时间:2021-06-07 00:27:43

----------------------------------2345王牌技术员联盟2345王牌技术员联盟、期待与您交流!---------------------------------

数据库一

(1)数据库中的概念
Catalog 分类 :不同的类数据放到不同数据库中
表: 不同类型的资料放到不同格子中,  列 ,字段
主键 :数据行的唯一标示 ,不会重复的列才能当主键没有特殊理由都要设主键
业务主键 :有业务意义的字段, 身份证银行账号
逻辑主键 :没有任何意义的字段, 流水号 推荐使用逻辑主键
表间关联: 外键
字段类型:

bit 可选值(0,1)

datetime

int

varchar

nvarchar

char :不足部分用空格代替 

varchar: 可变的长度所以名字之类的应该用varchar或nvarchar


sql语句
sql语句中字符串都是单引号 大小写不敏感

创建表语句: CREATE TABLE T_Person(Id int NOt NULL,Name nvarchar(50),Age int NULL),

删除表:Drop table T_Person

简单的插入语句:

Insert intoperson1(number,name,age)values(3,嘎嘎子,13)


sql主要分, 数据定义语言ddl(creattable droptable),  数据操作语言dml(insert into )
用 标识列实现自动将字段是标识列设置成是 一个表只有一个字段能有一个标识列
Guid算法 产生一串数字 主要用Guid产生一串不重复数字

用法 Guid id=Guid.NewGuid();


数据插入
insert into Person1(Name,Age)values('lily',38); (Name,Age)可省略 但一般不这样用
insert into person2(id,name,Age)value(newid() ,'lily',23);此时表中的id类型选择uniqueidentifier

Guid 类型的默认值可以设置为newid()就会自动生成Guid类型的一串数字


更新数据sql语句
update person set Age=30,Name=‘lala’ ; 修改person表中的所有数据 让他们的Age字段等于30 Name字段等于lala

update person set Age=Age+1; 可以让Age+1;


条件更新

update person set Nickname=N'青年人'where Age>30  更新年龄>30的 字段Nickname的为青年人


删除数据
delete from Person  删除表中所有数据 清空  Drop person  把表都去掉了

delete fromPerson where Age>20  去掉Age>20 这一行


数据检索
select *from 表名 检索 这个表中的所有数据

select 列名1列名2 from表名 检索表中列名为1列名为2的数据


修改表的字段名
select 列名 as 新列名,列名as 新列名 from表名
select gatedate();获取时间

select还可以计算 select 列名 as 姓名,Fsalary+1000 as 月薪  from 表名  把Faslary+1000;


聚合函数
select max(Fsalary) from 表名   字段Fsalary中最大的数查出来  类似的min()最小的 avg()平均
select count(*)from 表名  
select *from  表名  order by  列名   按照一个列 排序 默认升序从小到大  by后边加上(Asc降序 )( Desc升序)

语句中有where时 order by 放在where后边     
select* from person where Age>20 order by Age Desc   筛选表person中 年龄大于20的 排序方式为升序

通配符过滤
单字符匹配

半角下的"_" select*from person where name like '_hha' 已任意开头后边为hha的
半角下的"%" select*from person where name like '%n%';姓名中包含n的字符

空值处理
null  不等于没有名字
select *from person  where name is null  查出name中为null的数据


多值匹配
select * from person  where age=23 or age=19 or12 查找年龄为23 19 12的记录
select * from person where age in (23,12,34)查找 年龄为 23 12 34的记录
select * from person where age>20and age<30  查找 年龄大于20小于30的记录




数据库二
(1)分组查询
select Fage,Count (*)From person group by fage  按照年龄分组 输出这一组的个数

select fage,fsalary,count(*)from person group by age//错误  可以max(fsalary)
没有出现在group by 句子的列不能放到select 语句后 聚合函数除外
聚合函数不应该出现在where后边 可以换成having   having count(*)>1  having 是对分组后进行筛选

能用的列出现在select中


(2)限制结果集的函数

select top3 *from person order by fsalary Desc


(3)去掉重复数据
ALTER TABLE person subcompany varchar(20); 增加一个subcompany字段

select distinct  name from person  distinct 去掉重复的完全重复的行  
把两个结果和到一起
union (默认把重复的数据去掉)不让重复的去掉 应该是 union all 两个查询语句之间加上union    两个查询语句字段个数要一样类型要相容  
不刻意的去掉重复行  一般都写 union all
写报表
select '正式员工最高年龄',max(age)from person
union all

select '正式员工最低年龄',min(age)from person


(4)数字函数

abs()求绝对值

ceiling()舍入到最大数 3.1会变成4

floor()涉入到最小整数2.9变成2

round()两个参数 一个数值 一个精度 round(2.14,1)精度为一位小数点四舍五入

(5)字符串函数
len(字段)字段的长度 例如 select name len(name)from person  就会把name字段下  数据的长度显示出来 例如name 下有个“tom” 就会显示3

lower()

upper()转小写转大写

ltrim()字符串左侧空格去掉

rtrim()字符串右侧去掉

(ltrim(rtrim('ddd')))左右都去

substring('sdfdsd',2,3)从2开始长度为三  

select name substring(name ,2 ,3)字段中 name值中从2开始长度为三


(6)日期函数

datepart 为度量单位 例如 day  hh

getdate()取当前日期  

dateadd(datepart,number,date)

计算增加以后的日期  select dateadd(day,-3,gatedate())计算三天以前

datediff(datepart,stardate,enddate)
datepart(datepart,getdate())  取出日期的固定部分
统计员工入职年份个数

select datepart(year,indate),count(*)from person group by datepart(year,indate)


(7)
类型转换函数
cast(expression as date_type)  cast('123'as int) cast('2004-2-3'as datetime)

convert(datetime,'2009-09-09')


(8)空值处理函数
isnull(expression,value) 如果expression不为空 就显示expression值为空就显示value值
select isnull(name,'小李')as 姓名 from person
case函数 用法1
单值判断相当于switch case
  select name ,
{case fleve1
  when 1 then 'ddd'
when 2 then 'dddddd'
else '不知道'
end) as 客户类型 from person
}
select name
(case
    when salary<2000 then '低收入'
    when salary>=2000 and salary<=5000 then '中等收入'
else '高收入'
end)as 收入水平
from   person

(9)索引

为了提高查询的效率 只在经常需检索的字段上插入索引


(10)Join 关联

用法 ponson as o jion person1 as c  on o.customer=c.id


--------------------------------------------------- 2345王牌技术员联盟2345王牌技术员联盟、期待与您交流!---------------------------------------------------------