综合查询

/-------------------------------------------------select查询----------------------------------------------------/
select distinct usersex from t_user where usernl>25
 distinct:将查结果中的重复的记录删除,是每一条记录的值都是唯一的。

select username,usersex,usernl from t_user where usernl=28 or usernl=26 or usernl=24 order by usernl desc
select username,usersex,usernl from t_user where usernl in (28,26,24) order by usernl desc
 in:将某一字段usernl值和(28,26,24)进行运算,如果在集合(28,26,24) 中有usernl值存在就返回结果。


/----------------------------------------------应用最广,考试常考------------------------------------------------/
like 的用法:模糊查询(只能用于字符型数据:char,nchar,varchar,nvarchar) 
 select * from t_user where username like '%赵%'    (任意多个字符)
 select * from t_user where username like '_赵'     (任意一个字符)
 select * from t_user where username like '[刘-赵]叶%'  (以刘至赵开头)
 select * from t_user where username like '[^刘-赵]叶%'   (不以刘至赵开头)
 用汉字作为限制条件的规则:汉语拼音的打头第一个英文字母----汉语拼音的打头第一个英文字母,他们
 之间的所有汉字,这些汉字的汉语拼音的打头第一个英文字母要在上述范围内。
 例:[刘-赵],那么马就在范围内,范就不在范围内。
     [l-z]        m             f

 escape:(逃)跳逸字
  select * from t_user where userAdd like '鞍山#%' escape '#'  (查找有通配符的字符)
  含义:将'#'作为(逃)跳逸字,然后在模糊查询时,将'#'后面的一个字符作为查询字符使用

 % _ 当作通配符。
/----------------------------------------------应用最广,考试常考------------------------------------------------/
=================================================================================================================
/----------------------------------------------SQL的统计查询功能-------------------------------------------------/
//默认统计查询
select sum(userC) as C总分,sum(userSQL) as SQL总分 from t_user
 代表是:统计每一列(字段)的所有数据

select username as '姓名',userC+userSQL as 总分 from t_user
 代表是:统计每一行的userC+userSQL的和

select sum(userC+userSQL) as 总分 from t_user
 代表是:统计每一行每一列的所有数据。

//分组统计查询
select useradd,sum(userC+userSQL) as 总分 from t_user group by useradd
 group by:分组查询的关键字。
 useradd: 分组的字段名。
 注意:分组的字段名必须在select中返回该字段。
 
//条件统计查询
select username,sum(userC+userSQL) as 总分 from t_user group by username having sum(userC+userSQL)>170
 having:查询统计之后的数据的判断条件,只能在分组时使用。
 判断条件:sum(userC+userSQL)>170

 统计函数:(聚合函数)
  sum():求和。
  avg():求平均数。
  max():求最大值。
  min():求最小值。
  count():求满足情况的记录数量。count在进行数据分页的时候,非常有用。

 相关事例:
  select sum(userC) as C总分,sum(userSQL) as SQL总分 from t_user
  select avg(userC) as C总分,avg(userSQL) as SQL总分 from t_user
  select max(userC) as C总分,max(userSQL) as SQL总分 from t_user
  select min(userC) as C总分,min(userSQL) as SQL总分 from t_user
  select usersex, count(userSQL) as SQL总分 from t_user  group by usersex

//多行插入
insert into t_test select UserName,UserSex from t_user
 查询部分:select UserName,UserSex from t_user
 插入部分:insert into t_test
    t_test:要执行插入操作的表。
 功能:将查询语句部分返回的查询结果依次插入到t_test表中。(多行插入)
 注意:只能用在两个表之间的数据操作中,将一个表中的数据查询查询出来,再插到另一表中。
       每个字段都是一一对应的关系,最好是字段名和数据的长度都要相同。*数据类型必须相同*

-----------------------------------------------数据库表的单表查询部分-------------------------------------------------------

多表查询:

 *内连接:
  传统:select a.username,a.usersex,b.classname from T_user a,t_class b where a.classid=b.classid
        select:查询命令;
        a.username,a.usersex,b.classname:返回的字段;
        from:查询数据来自于哪个表的命令;
        T_user a,t_class b:查询数据来自于哪个表;a,b代表表的别名(省略as)
        where a.classid=b.classid:查询条件,(该条件是为了消除迪卡尔乘积)
      (如果是3个表的查询,用"与"运算再连接另一个消除迪卡尔乘积的判断)
        注意:多表查询时返回的字段前要加上表名。

  流行:select a.username,a.usersex,b.classname from T_user a inner join t_class b on a.classid=b.classid
        select:查询命令;
        a.username,a.usersex,b.classname:返回的字段;
        from:查询数据来自于哪个表的命令;
        T_user a:要查询一个表名。
        inner join:内连接。
        t_class b:内连接连接到的表名。(T_user a和t_class b进行了内连接)
        on a.classid=b.classid:连接条件,(该条件是为了消除迪卡尔乘积)

  select a.username,a.usersex,b.classname from T_user a,t_class b where a.classid=b.classid and usersex='男'
  select a.username,a.usersex,b.classname from T_user a inner join t_class b on a.classid=b.classid and usersex='男'


 *外连接:
  左外连接:  select a.username,a.usersex,b.classname from T_user a left  outer join t_class b on a.classid=b.classid
      
  右外连接:  select a.username,a.usersex,b.classname from T_user a right outer join t_class b on a.classid=b.classid
      
  完整外连接:select a.username,a.usersex,b.classname from T_user a full  outer join t_class b on a.classid=b.classid

  left  outer join:左外连接关键字,outer可以省略
  right outer join:右外连接关键字,outer可以省略
  full  outer join:完整外连接关键字,outer可以省略

  其它部分和内连接的注释相同。
  注意:外连接在应用时,需满足一个条件:两个子父表不能有外键约束,但要有关联的字段,来建立关系。
  外键约束:它本身不能决定表与表之间的关系,它只能验证关联字段的值是否合法。
  表之间关系的建立和外键约束约束没有必然的联系。
      
  完整外连接=左外连接+右外连接+内连接,(除去相同的数据)

 *交叉连接:
  select a.username,a.usersex,b.classname from T_user a cross join t_class b(就是迪卡尔乘积)

  在交叉连接后加入where a.classid=b.classid,它就和内连接完全相同
  select a.username,a.usersex,b.classname from T_user a cross join t_class b where a.classid=b.classid

  总述:在多表查询时当出现join时,查询条件的关键字on;否则,查询条件的关键字where。特殊情况交叉连接。

 *自连接:
                use pubs
                --利用自连接返回合著图书的标识和合著者的姓名
                select t1.title_id as '图书标识',rtrim(a.au_fname)+'   '+rtrim(a.au_lname) as 作者
                from authors a,titleauthor t1 inner join titleauthor t2 on t1.title_id=t2.title_id
                where t1.au_id<>t2.au_id and t1.au_id=a.au_id

                --titleauthor表是一张多对多表,是中间连接关系表,通过该表可以实现titles表与authors的多对多关系。
                --authors表是作者信息表  titles表是图书信息表

                自连接:字面理解就是自己与自己联接。许多子查询和外部查询引用同一标的语句称为自联接,即某个表和自身联接。
                与任何连接一样,自联接至少需要两个表,只是自联接不是将另一个表添加到查询,而是添加同一个表的第二个实例。
                这样就可以将表的第一个实例中的列与第二个实例中的列进行比较。

子查询:就是在一个查询语句中还有另一个查询语句。(比较重要)

//查询条件方式
select * from t_user where usersex='女'

//子查询(在主查询中查询的判断条件字段必须与子查询中返回的字段相同)
select * from t_user where userid in (select userid from t_user where usersex='女')

select * from t_user where usernum in (select usernum from t_user where usersex='女')
//它的执行顺序。就是先执行子查询,然后在执行主查询,返回相应的结果。
//在子查询结束之后:select * from t_user where userid in (1,2,8)

--在公司中谁的基本工资最高
select username from t_user where usermoney=(select max(usermoney) from t_user)
select username from t_user where usermoney in (select max(usermoney) from t_user)

//子查询分类:嵌套子查询,相关子查询,多行子查询。(根据子查询中的判断条件来确定的)

//嵌套子查询
select * from 学生表  where 学号  in (select 学号 from 成绩表 where C语言=77)

//相关子查询
select * from 学生表 where  学号  in (select 学号 from 成绩表 where 学生表.学号=成绩表.学号)

//多行子查询 
select * from 学生表  where 学号  in (select 学号 from 成绩表 where C语言>60)

//select分页功能:
//分页查询:将子查询语句中的信息排除(已读页),然后在剩余的信息中,查找前几条数据(当前页)。以这种方式来实现分页。
 select top 2 * from t_user where userid not in
 (select top 2 userid from t_user order by userid desc) order by userid desc
//一条sql 语句搞定数据库分页:
        select top 10 b.*
        from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b
        where b.主键字段 = a.主键字段 order by a.排序字段

--联合查询--
select * from t_user

select * from t_user where userid in
(
select userid from t_user where usersex='男'
union
select userid from t_user where usersex='女'
union
select userid from t_user where usersex='其它')
//联合查询的格式:将多个查询的结果组合在一起,把它看作是一个整体的结果来使用。
//union联合查询的关键字。(比较重要)

整本书中应用最多的就是:模糊查询,子查询,联合查询。
大家一定要掌握“联机丛书”的使用,提高自学能力。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值