SQL进阶语句

来源:互联网 发布:linux find 编辑:程序博客网 时间:2024/06/03 23:01
已经分享了SQL基本的命令,这次是对于SQL语句的较深入学习
表一:table-name1
id
name
sex
tell
address
remark
1
123
18711111111
上海
大学生
2
frank
18722222222
山东
高中生
3
张三
18733333333
上海
大学生

表二:table-name2

name
age
school
pro
123
21
上海交通大学
计算机
frank
17
衡水一中
理科
李四
23
北京理工大学
通信

一、多表查询
  1. select table-name1.name,table-name1.tell,table-name2.school from table-name1,table-name2 where   table-name1.name=table-name2.name;                                                                                                   显示结果为:name为123和frank两者的name、tell、school
  2. 将上面的语句使用别名查询                                                                                                                       select p1.name,p1.tell,p2.school from table-name1 as p1,table-name2 as p2 where p1.name=p2.name;
          给表赋予一个别名,使得查询语句更简化
     3. 将上面的语句使用join连接
          select p1.name,p1.tell,p2.school from table-name1 as p1 inner join table-name2 as p2 on                                 
         p1.name=p2.name;  
       3.1多表连接--join
          SQL的四种连接方式—内连接、左外连接、右外连接和全连接
       3.1.1 内连接—inner join或join
          内连接是将多个表中的相同字段满足on所设定的条件时,将共有列的值匹配所在的行。
       3.1.2 左外连接—left join或left outer join
          左外连接结果是将条件左边表的各行均显示,若右表与左表数据不匹配的情况下,该行的右边则用nul
          进行填充。 
       3.1.3 右外连接—right join或right outer join
          右外连接结果是将条件右边表的各行均显示,若左表有不匹配的数据,则用null填充。
       3.1.4 全连接—full join或 full outer join
           全连接结果是将条件左右两边的各行均显示,若有不匹配的数据,则用null填充。   
二、多个结果集操作
      1.并集— union
       select 列名 from table-name1  union select 列名 from table-name2;
       union命令是将两个结果集进行合并展示,不过两个表所要搜索的列类型必须相同,而且列数必须相同,
       如果结果中存在相同的数据则进行去重;使用union all的话则不对结果进行去重。
      2.交集— intersect
       select 列名 from table-name1 intersect select 列名 from table-name2;
       intersect命令是对两个结果集取交集,两个表所要搜索的列类型必须相同,而且列数必须相同。
      3.差集— except
       select 列名 from table-name1 except select 列名 from table-name2;
       except命令是返回左边表中有而右边表中没有的数据。
      4.结果集排序— order by
       结果集排序规则与单表排序规则相同,是对整个运算后的结果进行排序。
三、对于数据表的操作
       1.创建数据库表
        create table 表名(列名数据类型 [约束类型],列名 数据类型);(用于创建数据库表,列名与数据类型之间  
        用空格隔开,多列之间用逗号隔开) 
       2.对于列的约束
        2.1 not null:创建表的时候,如果在某一列后面添加not null 的约束,则该列插入数据时不可以为空;
        2.2 unique:该约束表示该列插入信息时不能输入重复的值,一个表中可以有多个unique约束;
        2.3 primary key:主键约束唯一标识数据库表中的一条记录,每个表的主键唯一且不能为空;
        2.4 foreign key:将一个表的A列作为另一个表B列的外键时,A列的数据必须存在于B列中;
        2.5 check:多一个表中的一列或多列进行条件约束,插入的值必须符合该条件;
        2.6 default:为某列添加一个默认值,当插入数据为空时则显示默认值。
       3.创建索引
        create index index-name on 表名(列名,列名);
        将一个数据库表的部分数据或者整个表做索引,加快对表的操作速度。
       4.对表中的列进行操作
        alter table table-name add 列名 数据类型;向数据库表中添加列
        alter table table-name drop column 列名;删除数据库表中的某列
        alter table table-name alter column 列名 数据类型;修改表中列的数据类型