黑马程序员__SQL学习笔记

来源:互联网 发布:什么软件可以算命 编辑:程序博客网 时间:2024/05/17 07:48

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

SQL功能语句和命令动词:
    功能                   命令动词        
数据定义语句(DDL)    CREATE,DROP,ALTER
数据操纵语句(DML)     INSERT,DELETE,SELECT,UPDATE
数据控制语句(DCL)     GRANT,REVOKE


常用语句实例:
SQL中关键字、表名、列名大小写不敏感,变量中存放的字符串内容大小写敏感。
创建表:create table T_Person(ID varchar(50) primary key,Name nvarchar(50),Age int not null)
更改表:新增列alter table T_Person add Tel varchar(50)
        删除列alter table T_Person drop column Tel 
删除表:drop table T_Person
向表中插入数据:insert into T_Person(ID,Name,Age) values('0001','tom',23)
删除表中数据:delete from T_Person where Name='tom'
更新表中数据:update T_Person set Age=20 where Name='tom'
查询语句: 
查询表中所有数据:select * from T_Person
查询部分列:select ID,Name from T_Person
查询数据库中的基本表:select table_name from myselfdb.INFORMATION_SCHEMA.TABLES where TABLE_TYPE='base table' 其中myselfdb是数据库名
使用别名查询:select ID as 编号,Name as 姓名 from T_Person
        或者  select ID 编号,Name  姓名 from T_Person


SQL聚合函数:
MAX(),MIN(),SUM(),AVG(),COUNT()  聚合函数不能出现在where语句中
select count(*),max(age),min(age),sum(age),avg(age) from T_Person


数据排序:order by
升序select * from T_Person order by age asc
降序select * from T_Person order by age desc
在排序的结果中在进行排序:
select * from T_Person order by age asc,salary desc;表中的数据显示按照年龄降序排序,年龄相同的数据,按照工资降序排序
order by子句要放在where子句,group子句之后,默认为升序排序


通配符过滤:使用关键字like
单字符匹配通配符使用半角_   select * from T_Person where name like '_om'
多字符匹配通配符使用半角%   select * from T_Person where name like '%m'


空值处理:is null,is not null
select * from T_Person where name is null
select * from T_Person where name is not null


多值匹配:
select * from T_Person where age in(20,32,44)
select * from T_Person where age between 20 and 30 等效 select * from T_Person where age>=20 and age<=30


数据分组:group by
select age,count(*) as 人数 from T_Person group by age having count(*)>3 查找年龄段超过3人的年龄
没有出现在group by中的列是不能放在select语句后列名的列表中,也不能出现在having子句中


限制结果集行数:
select top 5 * from T_Person order by age asc 查找表中年纪最小的5个人数据
select top 3 * from T_Person where ID not in (select top 5 ID from T_Person order by age asc)  order by age asc检索年龄从小到大排列第6名到第8名的信息
上面的语句等效于
select * from (select row_number() over(order by age asc) as num,* from T_Person) as t where t.nub>=6 and t.num<=8
 
去掉重复数据:distinct
select distinct * from T_Person
去掉检索结果中完全相同的两条数据,如果两条数据中只有部分列相同,则不算是重复的数据


日期函数:
获取当前日期:getdate() 
返回日期的特定部分:datepart(datepart,date)例如:返回当前日期的月份datepart(m,getdate())
计算增加以后的日期:dateadd(datepart,number,date) 例:计算三天前的日期dateadd(d,-3,getdate())
计算两个日期之间的差额:datediff(datepart,startdate,enddate)例如: DATEDIFF(D,'2012-3-3','2012-3-31')结果为28
 
数字函数:
求绝对值:abs()
舍入到最大整数:ceiling(),ceiling的中文意思是天花板,就是往上、往大数舍入
例如:ceiling(3.14)值为4,celing(-3.14)值为-3
舍入到最小整数:floor(),floor的中文意思是地板,就是往下、往小数舍入
例如:floor(3.14)值为3,floor(-3.14)值为-4
四舍五入:round(,) 例如:round(3.1415,3)值为3.142,round(3.1415,2)值为3.14


字符串函数:
计算字符串长度:len() 
转换大小写:lower(),uper()
去掉字符串左侧的空格:ltrim()
去掉字符串右侧的空格:rtrim()
去字符串中的子字符串:substring() 例如:substring('abcdefg',2,3)结果为bcd


类型转换函数:
cast(expression as int)
convert(int,expression)
right(expression,3)显示表达式右边3位
left(expression,3)显示表达式左边3位


空值处理函数:
isnull(expression,value)如果expression的值不为空,则显示expression,若为空,则显示value
例如:select isnull(name,'佚名') from t_person 姓名不为空显示姓名,为空显示佚名


case语句:
用法一:类似swith语句
select name,course,
(case grade
when 'A' then '优秀'
when 'B' then '良好'
when 'C' then '及格'
else '不及格'
end
) from t_course
用法二:类似if语句
(case
when age>=18 then ‘成年人’
when age<18 then ‘未成年’
end

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

原创粉丝点击