博主在工作中,常常需要使用sql语句来进行查询,总结发现,灵活使用这几个要点,就可以应付大部分简单情况。

一.连接:根据两个或多个表中的列之间的关系,从这些表中查询数据。

  • JOIN或INNER JOIN: 返回左表和右表中相互匹配的行
  • LEFT JOIN: 返回左表和右表中相互匹配的行,及左表中不相匹配的行
  • RIGHT JOIN: 返回左表和右表中相互匹配的行,及右表中不相匹配的行
  • FULL JOIN或FULL OUTER JOIN: 返回左表和右表中相互匹配的行,及不相匹配的行
  • 应用举例
  • 在一些题目中没有明确的暗示情况下,使用哪一种连接方式都可以;
  • 也有一些情况,只能使用特定的连接方式。

1.join/inner join

必须使用inner join的情况

  --查询所有未讲课的教师的Tname和Depart.
select TNAME,DEPART
from TEACHER
where TNO not in(select TEACHER.TNO from COURSE inner join
TEACHER on COURSE.TNO=TEACHER.TNO)
--或者使用 Except
select TNAME,DEPART from TEACHER
except
select TNAME,DEPART from COURSE join TEACHER on COURSE.TNO=TEACHER.TNO

上面的sql语句中的“select TEACHER.TNO from COURSE inner join TEACHER on COURSE.TNO=TEACHER.TNO”中,只能使用inner join,使用left join、right join、full join都是错误的。

2.left join和right join

使用了left join 的情况,调换一下表的位置,就可以用right join替换;反之亦然。

 --查询所有学生的Sname、Cname和Degree列。
select SNAME,CNAME,DEGREE
from STUDENT left join SCORE on STUDENT.SNO=SCORE.SNO
left join COURSE on SCORE.CNO=COURSE.CNO

也可以写成

 select SNAME,CNAME,DEGREE
from score right join STUDENT on STUDENT.SNO=SCORE.SNO
right join COURSE on SCORE.CNO=COURSE.CNO

3.使用full join的情况较少,暂时还没有用到。

二、嵌套

在sql语言中,一个select-from-where语句成为一个查询块。

将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询成为嵌套查询。

SQL语言允许多层嵌套查询,但要注意的是,子查询的select语句中不能使用order 不要子句,order by子句只能对最终查询结果排序。

当掌握了sql语句的执行顺序后,就会对这个限制的原因有更深刻的理解。

举例

子查询在where子句中

 --查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
select * from SCORE where DEGREE>(select DEGREE from SCORE where SNO='' and CNO='3-105')

三、子查询

上层的查询块称为外层查询或者父查询,下层查询块称为内层查询或者子查询。

子查询的位置可以很灵活,掌握这一点,感觉sql学习就有了很大的进展。

1.子查询可以放到where子句或having短语的条件中,这就是我们上面所介绍的嵌套查询

2.子查询可以出现在from子句中,这时子查询生成的临时派生表,称为主查询的查询对象

 --查询所有选修了1号课程的学生姓名  (当然也可以使用嵌套查询)
select Sname from Student,(select * from SC where cno='') SC1 where Student.sno=SC1.sno

3.子查询可以嵌套在INSERT语句中用以生成要插入的批量数据

 --对每个系,求学生的平均年龄,再把结果插入Dept_age(Sdept,Avg_age)中
insert into Dept_age(Sdept,Avg_age)
select Sdept.AVG(Sage)
from Student
group by Sdept

要点总结

1.连接:inner join、right join、left join 、full join

2.嵌套:将一个查询块嵌套在另一个查询块的where子句或having短语的条件中

3.子查询的位置可以很灵活

常用sql语法初级的更多相关文章

  1. oracle 常用SQL语法手册

    Select 用途: 从指定表中取出指定的列的数据 语法: SELECT column_name(s) FROM table_name 解释: 从数据库中选取资料列,并允许从一或多个资料表中,选取一或 ...

  2. 常用SQL语法

    1.替換A表中B字段中第二个字符 ,), 2.根据 Score 字段 排序 并分页 * from (select row_number() over(order by Score DESC) as r ...

  3. mysql常用sql语法

    一.创建主键的三种方式 1. CREATE TABLE user( uid INT PRIMARY KEY, uname VARCHAR(10), address VARCHAR(20) ) 2. C ...

  4. SQL语法之初级增删改查

    SQL语法之初级增删改查 1.增 1.1插入单行 INSERT INTO [表名](列名) VALUES(列值) 语法如下: INSERT INTO bsp_Nproductclass(guid,pi ...

  5. 【知识库】-数据库_MySQL常用SQL语句语法大全示例

    简书作者:seay 文章出处: 关系数据库常用SQL语句语法大全 Learn [已经过测试校验] 一.创建数据库 二.创建表 三.删除表 四.清空表 五.修改表 六.SQL查询语句 七.SQL插入语句 ...

  6. HIVE常用SQL语句及语法

    HIVE建内部表语句 create table dll102.sougou (id string,pwd string,name string,count int,seqno int,address ...

  7. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  8. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

  9. 常用SQL[ORACLE]

        1.常用系统函数 2.常用sql语句 3.一些定义和关键字 4.需要注意点   1.常用系统函数 ↑ --decode decode(column,if_value,value,elseif_ ...

随机推荐

  1. 对不队—— Alpha冲刺

    第三天  日期:2018/6/18 一. 今日完成任务:会议内容管理部分 冯晓.马思远:会议网站栏目管理开发,博客撰写 王爽.彭辉:参会人员管理开发 吴琼.郝延婷:审稿专家管理开发 1.1会议管理界面 ...

  2. 大数据存储的进化史 --从 RAID 到 Hdfs

    我们都知道现在大数据存储用的基本都是 Hdfs ,但在 Hadoop 诞生之前,我们都是如何存储大量数据的呢?这次我们不聊技术架构什么的,而是从技术演化的角度来看看 Hadoop Hdfs. 我们先来 ...

  3. 如何学好Java大数据并快速提升

    Java作为一种最流行的,最热门的编程语言,可以说它无处不在,目前全球有着数十亿的设备正在运行着Java,很多服务器程序都是用Java编写,用以处理每天超过数以千万的数据.无论是手机软件.手机Java ...

  4. C++学习笔记(二)——交换函数(swap)

    这次我们要透过一个简单的函数swap深入理解函数传参的本质以及在C++中如何选择传参方式. 先来看第一段程序: void swap(int x, int y) { int temp = y; y = ...

  5. Python 爬虫-正则表达式

    2017-07-27 13:52:08  一.正则表达式的概念 (1)正则表达式是用来简洁表达一组字符串的表达式,最主要应用在字符串匹配中. 正则表达式是用来简洁表达一组字符串的表达式 正则表达式是一 ...

  6. SQLServer创建用户、数据库、表、约束、存储过程、视图

    --创建登录账户和数据库用户 ' exec sp_grantdbaccess 'sysAdmin','aa' --给数据库用户赋权限 grant select,update,insert,delete ...

  7. C#两种数据类型

    C#的两种类据类型:值类型和引用类型   什么是值类型,什么是引用类型 概念:值类型直接存储其值,而引用类型存储对其值的引用.部署:托管堆上部署了所有引用类型. 引用类型:基类为Objcet 值类型: ...

  8. LeetCode--100--相同的树

    问题描述: 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1 / \ / \ 2 3 2 3 [1,2, ...

  9. codeforces 571a//Lengthening Sticks// Codeforces Round #317

    题意:三角形3条边,最多共添加ll长,问组成的合法三角形个数. 本来想用暴搜,觉得会超时就搜题解了.不过保证我解释得更清晰. 先计算ll长分配给3条边有几种分法?由于不分也是合法的,因此最后实际分出去 ...

  10. 『Os』常用方法记录

    os.rename(name_old, name_new) 『Scrapy』爬取斗鱼主播头像 重命名函数os.rename比win下的重命名强多了,它可以对路径重命名达到修改文件位置的功效. os.p ...