SQL 语句的语法顺序是:

  • SELECT[DISTINCT]
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • UNION
  • ORDER BY

一、查询SELECT

1、查询全部列:SELECT * FROM products

2、查询选中的列:SELECT prod_name,prod_id FROM products; 列之间要用逗号隔开,一般而言除非需要所有的列才用通配符检索,否则最好不要用,这样会降低检索和应用程序的性能。

3、去掉重复出现的值:SELECT DISTINCT vend_id FROM products; DISTINCT关键字作用于所有的列,如果后面紧跟二个列,则结果会是显示所有数据。

   

4、限制显示结果:

SQLservice数据库:SELECT TOP 4 prod_name FROM products;

MySQL数据库:SELECT prod_name FROM products LIMIT 5

检索其中的几行:SELECT prod_name FROM products LIMIT 4 OFFSET 2  第一个数字是检索的行数显示四行,第二个数字从哪里开始,不包括启始的,相当于从第三行开始。

等价于==SELECT prod_name FROM products LIMIT 2,4   注意数字是和上面相反的

oracle数据库:SELECT prod_name FROM products LIMIT WHERE ROWNUM <=5

5、注释:#号

多行注释:/*             */

二、排序数据 ORDER BY

1、单列排序:SELECT prod_name FROM products ORDER BY prod_name; ORDER BY保证是最后一条字句,不然会报错

2、多列排序:

SELECT prod_id,prod_price, prod_name FROM products
ORDER BY prod_price, prod_name;

4、按照列位置排序:--结果与上面一样

SELECT prod_id,prod_price, prod_name FROM products  ORDER BY 2,3;

5、指定排序方向:

DESC--降序,默认是升序,如果想多列都排序,必须对没列指定DESC

SELECT prod_id,prod_price, prod_name FROM products ORDER BY prod_price DESC,prod_name;

三、过滤数据

1、使用where字句--行数

SELECT prod_id,prod_price, prod_name FROM products
WHERE prod_price=3.49

2、where字句操作符:大于>、小于<、不等于<> !=、>=、<=、

(1)检查单个值

SELECT prod_id,prod_price, prod_name FROM products WHERE prod_price >10;

(2)不匹配检查

SELECT prod_id,prod_price, prod_name FROM products WHERE prod_id !='DLL01';

(3)范围值检查

SELECT prod_id,prod_price, prod_name FROM products WHERE prod_price BETWEEN 5.99 AND 10  包括开始和结束的值

(4)空值检查

SELECT cust_name,cust_email FROM customers WHERE cust_email IS NULL

3、高级过滤AND-且的关系

SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE vend_id='DLL01' AND prod_price<=4

4、高级过滤OR-或的关系

SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE vend_id='DLL01' OR prod_price>4
ORDER BY prod_price DESC

5、高级过滤求值顺序

想要的是>10的数据,为什么得到小于10的呢?这是因为and的优先级高于OR,所以计算的顺序变成了

(vend_id='BRS01' AND prod_price>=10),应该修改为以下语句,括号的优先级高于其他二个

6、高级过滤IN--符合选择条件的

SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE vend_id IN('DLL01','BRS01')
ORDER BY prod_price DESC

其实和OR是相同的功能,为什么用IN 呢?

  • 语法更加清楚
  • 求值顺序比OR AND容易管理
  • 比OR执行速度更快,性能好
  • 最大优点,可以包含其他的SELECT语句

7、高级过滤NOT——否定其后的条件

SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE NOT vend_id ='DLL01'
ORDER BY prod_name

一般配合IN 、BETWEEN、EXISTS使用

 四、更新

 UPDATE Customers SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '';//没有WHERE子句,DBMS将会用这个电子邮件地址更新Customers表中的所有行 UPDATE Customers SET cust_contact = 'Sam Roberts',cust_email = 'sam@toyland.com' WHERE cust_id = '';//更新多个列 DELETE FROM Customers WHERE cust_id = '';//删除数据

 五、子查询

假如需要列出订购物品RGAN01的所有顾客,应该怎样检索?下面列出具体的步骤。

1.检索包含物品RGAN01的所有订单的编号。

2.检索具有前一步骤列出的订单编号的所有顾客的ID。

3.检索前一步骤返回的所有顾客ID的顾客信息。

 -- SELECT order_num,prod_id FROM orderitems WHERE prod_id='RGAN01'
-- SELECT cust_id FROM orders WHERE order_num IN(,)
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE
prod_id = 'RGAN01');//结合二个语句

SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Order
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'));

 

 六、联结表

表结构

1、内联结查询

根据表中的共同列来查询的,是指主外键关系,二个表没有主次之分。

  • 使用WHERE条件连接字句
  • 在FROM字句中使用JOIN.......ON

-- 查看订单编号,购买数量,购买商品编号(订单表),用户姓名(用户表)

【WHERE】

2个表

3个表

【JOIN .........IN】

2、外链接查询

至少返回一个表中的所有记录,根据匹配条件有选择的返回另一个表中的记录,有主次之分

【左外连接】

LEFT  JOIN 以左表为主,返回主表的所有记录,如果左表的一些行在右表没有匹配,用NULL

【右外连接】

右边的为主表

下面二个语法是等价的

-- SELECT vend_name,prod_name,prod_price FROM vendors,products
WHERE vendors.vend_id = products.vend_id;
-- SELECT vend_name,prod_name,prod_price
FROM vendors JOIN products ON vendors.vend_id=products.vend_id;//和上面等价

2、联结多个表

SELECT prod_name, vend_name, prod_price, quantity
FROM OrderItems, Products, Vendors
WHERE Products.vend_id = Vendors.vend_id
AND OrderItems.prod_id = Products.prod_id
AND order_num = ;

不要联结不必要的表。联结的表越多,性能下降越厉害。

 使用别名

SELECT cust_name, cust_contact
FROM Customers AS C, Orders AS O, OrderItems AS OI
WHERE C.cust_id = O.cust_id
AND OI.order_num = O.order_num
AND prod_id = 'RGAN01';
//Oracle不支持AS关键字。要在Oracle中使用别名,可以不用AS,简单地指定列名即可(因此,应该是Customers C,而不是Customers AS C)

3、自联结

SQL语句之-简单查询的更多相关文章

  1. [转]在Excel中使用SQL语句实现精确查询

    本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQ ...

  2. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

  3. mongodb 跟踪SQL语句及慢查询收集

    有个需求:跟踪mongodb的SQL语句及慢查询收集 第一步:通过mongodb自带函数可以查看在一段时间内DML语句的运行次数. 在bin目录下面运行  ./mongostat -port 端口号  ...

  4. 在JDBC中实现SQL语句的模糊查询

    在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...

  5. SQL语句技巧:查询时巧用OR实现逻辑判断

    首先看以下SQL逻辑语句块: ) ) SET @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传 SET ...

  6. LINQ to Sql系列二 简单查询和联接查询

    这一篇文章主要总结LINQ to sql的简单查询(单表查询)和联接查询(多表查询) 单表查询 需求是我们要输出TClass表中的结果.使用了from-in-select语句,代码如下: public ...

  7. SQL语句:子查询

    一,子查询定义: 子查询就是嵌套在主查询中的查询. 子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY. 但并不是每个位置嵌套子 ...

  8. LINQ to SQL语句(1)Select查询的九种形式

    目录 说明 简单形式 匿名类型形式 条件形式 指定类型形式 筛选形式 Shaped形式 嵌套形式 本地调用方法形式 Distinct形式 说明 与SQL命令中的select作用相似但位置不同,查询表达 ...

  9. MySQL 5.6 记录 SQL 语句与慢查询

    环境: MySQL 如果需要记录 MySQL 的查询语句,需要在配置文件(Linux 下为 my.cnf,Windows 下为 my.ini)中添加配置: general_log = ON gener ...

随机推荐

  1. Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)

    1.Josephu(约瑟夫.约瑟夫环)问题: 设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m ...

  2. Unix时间戳和Java 的 System.currentTimeMillis()的区别

  3. CAS单点登录系统入门--分布式登录验证

    1.开源单点登录系统CAS入门 1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要 ...

  4. [集合]Map的 entrySet() 详解以及用法(四种遍历map的方式)

    Entry 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也 ...

  5. 使用Docker部署Spring-Boot+Vue博客系统

    在今年年初的时候,完成了自己的个Fame博客系统的实现,当时也做了一篇博文Spring-boot+Vue = Fame 写blog的一次小结作为记录和介绍.从完成实现到现在,也断断续续的根据实际的使用 ...

  6. eclipse调试openstack的nova代码

    前段时间一直在研究openstack的nova部分的代码.特别想知道,怎样用eclipse来调试代码.也在论坛上问了别人.无果.最后还是自己摸索出了出路. 以下写出自己探索之路.我是用devstack ...

  7. 计算机系统结构总结_Branch prediction

    Textbook:<计算机组成与设计——硬件/软件接口>  HI<计算机体系结构——量化研究方法>          QR Branch Prediction 对于下面的指令: ...

  8. 剑指offer-二叉搜索树的第k个结点树-python

    二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的 ...

  9. 错误: JMX 连接器服务器通信错误: service:jmx:rmi://***

    电脑没有空间了,正想清理一下硬盘空间,这时不知道金山毒霸啥时候装上了,就想把它卸载了,卸载的过程中看到有空间清理,随手一点,清理出了10个G,然后再打开idea运行项目就报出这个错. 错误: JMX ...

  10. 算法(C#版)动态规划和贪心算法

    https://blog.csdn.net/kouzhuanjing1849/article/details/88954811