黑马程序员--数据库基础

--------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------



(1)数据库中的概念
表 不同类型的资料放到不同格子中  列 字段 
主键 数据行的唯一标示 不会重复的列才能当主键没有特殊理由都要设主键
业务主键 有业务意义的字段 身份证银行账号 
逻辑主键 没有任何意义的字段 流水号  推荐使用逻辑主键
表间关联 外键
字段类型
 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  查找 年龄大于20小于30的
where age>20and age<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 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员训练营入学考试题 1、方法中的内部类能不能访问方法中的局部变量,为什么? 2、编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)... 4、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。 5、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 6、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。 7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 ? 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路) 10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值