黑马程序员-------SQL查询语句入门

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

一、数据插入

insert into Person1(Name,Age) values('jerry',20);

insert into Person2(Id,Name,Age) values(newid(),'tom',25);
  1. insert语句可以省略表名后的列名(不推荐);
  2. 如果插入的行中有些字段的值不确定,那么insert的时候不指定那些列即可。
  3. 可以给字段默认值,如果Guid类型主键的默认值设定为newid()就会自动生成(很少这么做)

二、数据更新

  1. 更新一个列:
    update T_Persons Age=20
  2. 更新多个列:
    update T_Persons set Age=20,Name='tom'
  3. 更新一部分数据:
    update T_Persons set Age=20 where Name='tom'
    用where语句表示只更新Name是'tom'的行,注意SQL中等于判断用单个=,而不是==。
  4. where中还可以使用复杂的逻辑判断:
    update T_Persons set Age=20 where Name='tom' or Age<25
    or相当于C#中的||(或)
  5. where中可以使用的其他逻辑运算符:or,and,not,<,>,>=,<=,!=,<>等

三、数据删除

  1. 删除表中全部数据:
    delete from T_Persons
    delete只是删除数据,表还在,和drop Table不同。
  2. 删除一部分数据:
    delete from T_Persons where A>10
    

四、数据检索

  1. 简单的数据检索:
    select * from T_Employee
  2. 只检索需要的列:
    select FNmuber from T_Employee 
    select FName,FAge from T_Employee
  3. 列别名:
    select FNumber as 编号, FName as 姓名,FAge as 年龄 from T_Employee
  4. 使用where检索符合条件的数据:
    select FName from T_Employee 
    where FSalary<5000
  5. 还可以检索不与任何表关联的数据:
    select 1+1;
    select newid(); 
    select getdate();
    

五、数据排序

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

六、通配符过滤

  1. 通配符过滤使用like
  2. 单字符匹配的通配符为半角下划线“_”,它匹配单个出现的字符·。以任意字符开头,剩余部分为“erry”:
    select * from T_Employee 
    where FName like '_erry'
  3. 多字符匹配的通配符为半角百分号“%”,它匹配任意次数(零或多个)出现的任意字符。“k%”匹配以“k”开头、任意长度的字符串。检索姓名中包含字母“n“的员工的信息:
    select * from T_Employee 
    where FName like '%n%'
    

七、空值处理

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

八、数据分组

  1. 按照年龄进行分组统计各个年龄段的人数:
    select FAge,Count(*) from T_Employee 
    group by FAge
  2. group by 子句必须放到where语句之后。
  3. 没有出现在group by 子句中的列是不能放到select语句的列名列表中的(聚合函数除外)。
    select FAge,avg(FSalary) from T_Employee 
    group by FAge
  4. 在where中不能使用聚合函数,必须使用having,having要位于group by 之后。
    select FAge,Count(*) as 人数 from T_Employee 
    group by FAge 
    having count(*)>1
  5. 注意having中不能使用未参数分组的列。having不能替代where,作用不一样。having是对组进行过滤。

九、限制结果集行数

  1. select top 5 * from T_Employee 
    order by FSalary desc
  2. (*) 检索,按照工资从高到低排序检索从第六名开始一共三个人的信息:
    select top 3 * from T_Employee 
    where FNumber not in (select top 5 FNumber  from T_Employee order by FSalary desc) 
    order by FSalary desc

十、联合结果集

  1. 简单的结果集联合:
    select FNumber,FName,FAge from T_Employee 
    union 
    select FIdCardNumber,FName,FAge from T_TempEmployee
  2. 基本的原则:每个结果集必须有相同的列数 ;每个结果集的列必须类型相容。
  3. select FNumber,FName,FAge,FDepartment from T_Employee 
    union 
    select FIdCardNumber,FName,FAge,‘临时工,无部门’ from T_TempEmployee
  4. union合并两个查询结果集,并且将其中完全重复的数据行合并为一条。union因为要进行重复值扫描,所以效率低,。因此如果不是确定要合并重复行,那么就用union all。
    select FName,FAge from T_Employee 
    union all
    select Fname,FAge from T_TempEmployee


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

详细请查看:http://net.itheima.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值