黑马程序员--SQL入门相关知识

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


1.SQL语句入门

SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法。
SQL语句中字符串用单引号。
SQL主要分DDL(数据定义语言)和DML(数据操作语言)两类。Create Table、Drop Table、Alter Table等属于DDL,Select 、Insert、Update、Delete等属于DML。

2.主键选择

SQLServer中两种常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID)。

用标识列实现字段自增可以避免并发等问题,不要开发人员控制自增。
用标识列的字段在Insert的时候不用指定主键的值。将字段的“是标识列“设置为“是”,一个表只能有一个标识列。
Guid算法是一种可以产生唯一标识的高效算法,它使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复 ,无论是同一个计算机上还是不同的计算机。SQLServer中生成GUID的函数newid(),.Net中生成Guid的方法:Guid.NewGuid(),返回是Guid类型。
Int自增字段的优点:占用空间小、无需开发人员干预、易读;缺点:效率低;数据导入导出的时候很痛苦。
Guid的优点:效率高、数据导入导出方便;缺点占用空间大、不易读。
 业界主流倾向于使用Guid。

3.数据插入,更新,删除,检测,汇总,排序等

insert into Person(Name,Age) values('lily',38);

insert into Person1(Id,Name,Age)values(newid(),'tom',30);

更新一个列:UPDATE T_Person Set Age=30
更新多个列: UPDATE T_Person Set Age=30,Name=‘tom’
更新一部分数据: UPDATE T_Person Set Age=30 where Name=‘tom’

删除表中全部数据:DELETE FROM T_Person。(Delete只是删除数据,表还在,和Drop Table不同)

SELECT * FROM T_Employee
SELECT Name,FAge FROM T_Employee
SELECT Number AS 编号,Name AS 姓名 ,Age AS 年龄 FROM T_Employee
SELECT Name FROM T_Employee WHERE Salary<5000。
select 1+1;select newid();select getdate();

SQL聚合函数:MAX(最大值)、MIN(最小值)、AVG (平均值)、SUM (和)、COUNT(数量)
查找大于25岁的员工的最高工资 :SELECT MAX(Salary) FROM T_Employee WHERE Age>25
查找最低工资和最高工资:SELECT MIN(Salary),MAX(Salary) FROM T_Employee

order by 子句位于SELECT语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从大到小排列, DESC)。
按照年龄升序排序所有员工信息的列表:SELECT * FROM T_Employee ORDER BY FAge ASC
按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序 :SELECT * FROM T_Employee ORDER BY Age DESC,Salary DESC
order by子句要放到WHERE子句之后 :SELECT * FROM T_Employee WHERE Age>23 ORDER BY Age DESC,Salary DESC

4.通配符过滤

通配符过滤使用LIKE 。
单字符匹配的通配符为半角下划线“_”。以任意字符开头,剩余部分"erry” :SELECT * FROM T_EmployeeWHERE FName LIKE '_erry'
多字符匹配的通配符为半角百分号“%“。它匹配任意次数(零或多个)出现的任意字符。“k%”匹配以“k”开头、任意长度的字符串。

检索姓名中包含字母“n”的员工信息 :SELECT * FROMT_Employee WHERE FName LIKE '%n%'

5.空值处理

数据库中,一个列如果没有指定值,那么值就为null,这个null和C#中的null,数据库中的null表示“不知道”,而不是表示没有。因此select null+1结果是null,因为“不知道”加1的结果还是“不知道”。
SELECT * FROM T_Employee WHERE NAME=null ;
SELECT * FROM T_Employee WHERE NAME!=null ;
都没有任何返回结果,因为数据库也“不知道”。
SQL中使用is null、is not null来进行空值判断: SELECT *FROM T_Employee WHERE NAME is null ; SELECT *FROM T_Employee WHERE NAME is not null ;

6.多值匹配

SELECT Age,Number,Name FROM T_Employee WHERE Age IN (23,25,28)
 范围值:SELECT * FROM T_Employee WHERE AGE>=23 AND AGE <=27 ;SELECT * FROM T_Employee WHERE AGE BETWEEN 23 AND 27

7.数据分组

按照年龄进行分组统计各个年龄段的人数:SELECT Age,Count(*) FROM T_Employee GROUP BY age
GROUP BY子句必须放到WHERE语句的之后没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的 (聚合函数中除外)•
错误:SELECT Age,Salary FROM T_Employee GROUP BY Age
正确:SELECT FAge,AVG(Salary) FROM T_Employee GROUP BY Age

8.Having语句

 在Where中不能使用聚合函数,必须使用Having,Having要位于Group By之后,
SELECT Age,COUNT(*) AS 人数 FROM T_Employee GROUP BY Age  HAVING COUNT(*)>1
注意Having中不能使用未参与分组的列,
Having不能替代where。作用不一样,Having是对组进行过滤。

 

9.限制结果集行数

select top 5 * from T_Employee order by Salary Desc


检索按照工资从高到低排序检索从第六名开始一共三个人的信息 :SELECT top 3 * FROM T_Employee WHERE Number NOT IN (SELECT TOP 5 Number FROMT_Employee ORDER BY Salary DESC) ORDER BY Salary DESC

10.去掉数据重复

SELECT DISTINCE NAME FROM  T_Employee (去掉重复的姓名)

11.联合结果集(union  or union all)

SELECT NAME ,AGE FROM  T_Employee UNION  SELECT FNAME ,FAGE FROM  T_Employee2(显示两种表中NAME,AGE数据合在一起,不分顺序)

注意:两种表中的数据个数一致,数据类型一致。

SELECT NAME FROM  T_Employee UNION  ALL SELECT FNAME  FROM  T_Employee2(l显示两种表中数据不重复的合在一起)

12.数字函数

ABS() :求绝对值。
CEILING():舍入到最大整数 。3.33将被舍入为4、2.89将被舍入为3、-3.61将被舍入为-3。
 FLOOR():舍入到最小整数。3.33将被舍入为3、2.89将被舍入为2、-3.61将被舍入为-4。
 ROUND():四舍五入。舍入到“离我半径最近的数” 。Round→“半径”。Round(3.1425,2)。

13.字符串函数

LEN() :计算字符串长度
LOWER() 、UPPER () :转小写、大写
LTRIM():字符串左侧的空格去掉
RTRIM () :字符串右侧的空格去掉
LTRIM(RTRIM(' bb '))
SUBSTRING(string,start_position,length)
参数string为主字符串,start_position为子字符串
在主字符串中的起始位置,length为子字符串的
最大长度。SELECT
SUBSTRING('abcdef111',2,3)

14.日期函数

SELECT GETDATE() :取得当前日期时间

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 详细请查看:http://net.itheima.com/


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值