`
TRAMP_ZZY
  • 浏览: 138990 次
社区版块
存档分类
最新评论

SQL 笔记(一)

    博客分类:
  • SQL
sql 
阅读更多
1 ORDER BY 除了支持按列名排序,还支持按列位置排序(位置从1 开始计数)。
	select prod_id, prod_price, prod_name from products order by prod_price, prod_name;
	select prod_id, prod_price, prod_name from products order by 2, 3;

2. ASC ascending 升序排列(A-Z)DESC descending降序排列(Z-A)
	两个关键字只应用到直接位于其前面的列名。
	
3. WHERE 字句操作符
	=		等于
	<>		不等于
	!=		不等于
	<		小于
	<=		小于等于
	!<		不小于
	>		大于
	>=		大于等于
	!>		不大于
	BETWEEN	在指定的两个值之间
	IS NULL 为NULL值
	
4. BETWEEN  是闭区间
	select * from products where prod_price between 5.99 and 10;
	
5. NULL 值检查
	select vend_id from vendors where vend_state is null;
	
6. 逻辑操作符 OR AND
	在处理OR 操作符前,优先考虑AND。

7. IN 操作符。用来指定条件范围,范围中的每个条件都可以进行匹配。
	IN 取合法值的由逗号分隔的清单。
	select prod_name, prod_price from products
    -> where vend_id IN ('DELL01', 'BRS01')
    -> ORDER by prod_name;
	
8. NOT 否定之后所跟的条件。

9. LIKE 操作符。通配符搜索智能用于文本字符串,非文本数据类型不能使用。
	% 表示任意字符出现的任意次数。
	select prod_id, prod_name from products where prod_name like 'Fish%';
	select prod_id, prod_name from products where prod_name like 'F%y';
	 
	 _ 下划线通配符。只匹配单个字符而不是多个字符。
	 select prod_id, prod_name from products 
    -> where prod_name like '_ inch%';
	
	(MySQL 不支持)方括号[] 通配符。用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。
	select cust_contact from customers where 
    -> cust_contact like '[JM]%' ORDER by cust_contact;
	// 找出所有联系人以J或者M开头的。
	^ 脱字符来取反。
	select cust_contact from customers where 
    -> cust_contact like '[^JM]%' ORDER by cust_contact;
	
	通配符的使用技巧:
	不要过分使用。不要放在搜索条件的开始位置。

10. 计算字段
	拼接字段 MySQL contact
	select concat(vend_name, '(',vend_country,')') from vendors order by vend_name;
	其他数据库可能是+ 或者 ||
	
	去右边空格 RTRIM() LTRIM() TRIM()
	select rtrim(concat(vend_name, '(',vend_country,')')) from vendors order by vend_name;
	
	别名
	select rtrim(concat(vend_name, '(',vend_country,')')) as vend_name from vendors order by vend_name;
	select rtrim(concat(vend_name, '(',vend_country,')'))  vend_name from vendors order by vend_name;
	
	执行算数计算
	select prod_id, quantity, quantity*item_price as expanded_price from orderitems where order_num = 20008;
	+---------+----------+----------------+
	| prod_id | quantity | expanded_price |
	+---------+----------+----------------+
	| RGAN01  |        5 | 24.95          |
	| BR03    |        5 | 59.95          |
	| BNBG01  |       10 | 34.90          |
	| BNBG02  |       10 | 34.90          |
	| BNBG03  |       10 | 34.90          |
	+---------+----------+----------------+
	
	SQL 支持的算数操作符
	+		加
	-		减
	* 		乘
	/		除
	
11. 函数 一般在数据上执行。
	MySQL 提取串的组成部分 SUBSTRING()
	MySQL 数据类型转换	CONVERT()
	
	文本处理函数 UPPER()
	select vend_name, UPPER(vend_name) AS vend_name_upcase from
    -> vendors order by vend_name;
	+-----------------+------------------+
	| vend_name       | vend_name_upcase |
	+-----------------+------------------+
	| Bear Emporium   | BEAR EMPORIUM    |
	| Bears R Us      | BEARS R US       |
	| Doll House Inc. | DOLL HOUSE INC.  |
	| Fun and Games   | FUN AND GAMES    |
	| Furball Inc.    | FURBALL INC.     |
	| Jouets et ours  | JOUETS ET OURS   |
	+-----------------+------------------+
	
	LENGTH()
	select vend_name, LENGTH(vend_name) AS vend_name_upcase from
    -> vendors order by vend_name;
	
	SOUNDEX() 函数将任何文本串转换为器语音表示的字母数字模式的算法。
	select cust_name, cust_contact from customers where SOUNDEX(cust_contact) = 
    -> SOUNDEX('Michael Green');
	+------------+----------------+
	| cust_name  | cust_contact   |
	+------------+----------------+
	| Kids Place | Michelle Green |
	+------------+----------------+

	日期和时间处理函数
	select * from orders where YEAR(order_date) = 2004;
	+-----------+---------------------+------------+
	| order_num | order_date          | cust_id    |
	+-----------+---------------------+------------+
	|     20005 | 2004-05-01 00:00:00 | 1000000001 |
	|     20006 | 2004-01-12 00:00:00 | 1000000003 |
	|     20007 | 2004-01-30 00:00:00 | 1000000004 |
	|     20008 | 2004-02-03 00:00:00 | 1000000005 |
	|     20009 | 2004-02-08 00:00:00 | 1000000001 |
	+-----------+---------------------+------------+
	MySQL 使用YEAR() 从日期中提取年。

	数值处理函数
	ABS()		返回一个数的绝对值
	COS()		返回一个角度的余弦
	EXP()		返回一个数的指数
	PI()		返回圆周率
	SIN()		返回一个角度的正弦值
	SQRT()		返回一个数的平方根
	TAN()		返回一个角度的正切
	
12. 聚集函数 运行在行组上,计算和返回单个值的函数。
	AVG()		返回某列的平均值	忽略列值为NULL的行
	COUNT()		返回某列的行数
	MAX()		返回某列的最大值
	MIN()		返回某列的最小值
	SUM()		返回某列的和
	
	select AVG(prod_price) AS avg_price from products;
	+-----------+
	| avg_price |
	+-----------+
	| 6.823333  |
	+-----------+
	
	COUNT COUNT(*)表示对表中的数目进行计算,不管表列中包含的是NULL
	还是非空值。
	COUNT(column) 对特定列中具有值的行进行计数,忽略NULL值。
	select count(*) as num_cust from customers;
	+----------+
	| num_cust |
	+----------+
	|        5 |
	+----------+
	select count(cust_email) as num_cust from customers;
	+----------+
	| num_cust |
	+----------+
	|        3 |
	+----------+
	
	select SUM(quantity) AS items_ordered from orderitems;
	
	DINSTANCT 去重复
	select AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 'Dll01';
	// 只计算price 不同的行
	
	DISTINCT 必须使用列名,不能用于计算或表达式。只能用于COUNT(column), 不能用于COUNT(*);
	
13. 分组数据
	GROUP BY 
	select vend_id, count(*) as num_prods from products 
    -> group by vend_id;
	+---------+-----------+
	| vend_id | num_prods |
	+---------+-----------+
	| BRS01   |         3 |
	| DLL01   |         4 |
	| FNG01   |         2 |
	+---------+-----------+
	GROUP BY 指示DBMS分组数据,然后对每个组而不是整个结果集进行聚集。
	GROUP BY 必须出现在WHERE字句之后,ORDER BY子句之前。
	select cust_id, count(*) as orders from orders group by cust_id
    -> having count(*) >= 2;
	+------------+--------+
	| cust_id    | orders |
	+------------+--------+
	| 1000000001 |      2 |
	+------------+--------+
	
	WHERE和HAVING 
	where 在数据分组钱进行过滤,having 在数据分组后尽心过滤。

	列出具有两个以上、加个为4以上的产品的供应商
	select vend_id, count(*) as num_prods from products
    -> where prod_price >= 4 group by vend_id 
    -> having count(*) >= 2;
	+---------+-----------+
	| vend_id | num_prods |
	+---------+-----------+
	| BRS01   |         3 |
	| FNG01   |         2 |
	+---------+-----------+
	
	GROUP BY 排序
	select order_num, count(*) as items from orderitems
    -> group by order_num having count(*) >= 3 order by items, order_num;
	+-----------+-------+
	| order_num | items |
	+-----------+-------+
	|     20006 |     3 |
	|     20009 |     3 |
	|     20007 |     5 |
	|     20008 |     5 |
	+-----------+-------+

14. 使用子查询
	select cust_id from orders where order_num in 
    -> (select order_num from orderitems where prod_id='RGAN01');
	+------------+
	| cust_id    |
	+------------+
	| 1000000004 |
	| 1000000005 |
	+------------+
	select cust_name, cust_contact from customers where
    -> cust_id in (select cust_id from orders where order_num in (select order_num from orderitems where prod_id = 'RGAN01'));
	+---------------+--------------------+
	| cust_name     | cust_contact       |
	+---------------+--------------------+
	| Fun4All       | Denise L. Stephens |
	| The Toy Store | Kim Howard         |
	+---------------+--------------------+

	作为子查询的SELECT语句只能查询单个列。企图检索多个列将返回错误。
	
	作为计算字段使用子查询
	检索所有用户的订单数量
	select cust_name, cust_state, (select count(*)from orders where orders.cust_id = customers.cust_id) as orders from
    -> customers order by cust_name;

分享到:
评论

相关推荐

    SQL学习笔记一

    最后,`SQL笔记一.doc`可能包含了更详细的学习内容,如WHERE子句的使用、条件运算符、通配符搜索、集合操作以及视图和存储过程的创建等。通过阅读这份笔记,你将能够系统地掌握SQL的基本语法,并逐步提升到更高级的...

    sql笔记.md

    sql笔记.md

    oracle_sql笔记

    Oracle SQL是数据库管理员和开发人员在Oracle数据库系统中进行数据查询和管理的重要工具。这篇笔记主要涵盖了Oracle SQL的...这两份“Oracle SQL笔记”文档应包含了上述各个方面的详细解释和实例,值得仔细阅读和学习。

    20170909学习sql笔记

    标题“20170909学习sql笔记”表明这是一个关于SQL学习的资料,可能包含了一天的学习记录或者一个教程的集合。SQL,全称Structured Query Language,是用于管理和处理关系数据库的标准语言。这个标题暗示我们将探讨...

    JAVA 与 Sql学习笔记

    【JAVA与Sql学习笔记】 在Java编程中,与SQL数据库的交互是不可或缺的一部分。这篇学习笔记主要关注如何在Oracle数据库中使用PL/SQL的FORALL语句进行批量操作,以及如何利用批绑定(Bulk Binding)来提升性能。此外...

    SQL Server 笔记.docx

    SQL Server 数据库管理笔记 SQL Server 是一种关系型数据库管理系统,由 Microsoft 公司开发,广泛应用于各种行业和领域。作为一名 ITIndustry 大师,我将根据提供的文件信息,总结出相关的知识点,帮助您快速了解 ...

    郝斌Sql2005的笔记

    SQL Server 2005是一个强大的关系型数据库管理系统,由微软公司开发。郝斌老师的笔记主要涵盖了数据库的基础概念、操作以及约束等方面的知识,旨在帮助学习者更好地理解和记忆SQL Server 2005的关键点。 首先,...

    最全的ORACLE-SQL笔记

    【Oracle SQL笔记详解】 Oracle SQL是用于访问和操作Oracle数据库的强大工具,涵盖了各种查询、更新和管理数据的方法。以下是对笔记中提及的一些关键知识点的详细解释: 1. **登录Oracle数据库**:通常以超级管理...

    OracleSQL笔记

    ### Oracle SQL 笔记知识点详解 #### 一、SQLPlus 命令及环境变量 Oracle_sid - **SQLPlus 命令位置**:在 Oracle 安装目录下的 `bin` 文件夹中,可以通过 SQLPlus 来执行 SQL 命令。 - **Oracle_sid 环境变量**:...

    PL/SQL笔记pl/sql笔记

    本篇笔记主要涵盖了PL/SQL的基础语法和常用操作,包括检索数据、操纵数据以及SQL游标的应用。 在PL/SQL块中,可以直接嵌入的数据操作语句包括SELECT、DML(INSERT、UPDATE、DELETE)以及事务控制语句(COMMIT、...

    SQL笔记!很详细的!

    SQL Server 2005是一款由微软公司开发的关系型数据库管理系统,是SQL Server系列中的一个重要版本。它在SQL Server 2000的基础上进行了大幅度的改进和完善,在性能、安全性、易用性等方面都有显著提升。SQL Server ...

    pl/sql个人笔记.

    ### PL/SQL 个人笔记详解 #### 一、PL/SQL 块中可嵌入的 SQL 语句类型 PL/SQL(程序化SQL)是Oracle数据库的标准编程语言,它扩展了SQL的功能,允许在数据库环境中编写过程化的业务逻辑。在PL/SQL中,可以嵌入多种...

    SQL2005学习笔记

    《SQL2005学习笔记》是一份深入探讨SQL Server 2005核心概念、功能及优化策略的宝贵资料。SQL Server 2005是微软推出的一款强大的关系型数据库管理系统,它在数据存储、处理和分析方面具有广泛的应用。这份笔记旨在...

    SQL笔记下载

    除了这些基础操作,SQL笔记可能还会涉及更复杂的查询技术,比如联接(JOIN)、子查询、视图(VIEW)的创建和使用,以及事务处理(TRANSACTION)等。联接允许你从多个表中合并数据,子查询可以在主查询内部执行查询,...

    hivesql笔记.sql

    hivesql笔记.sql

    SQL server2005笔记

    SQLserver 数据库学习笔记 欢迎大家下载学习,共同进步啊

    SQLServer2005数据库学习笔记

    笔记是本人学习SQLServer一段时间后重新整理出来的,适合有一些入门基础的人学习。 ├─01 安装及使用 │ SQLServer2005安装及使用.txt │ ├─02 常用函数 │ function.sql │ ├─03 建表、建库 │ create.sql ...

    SQL学习全笔记

    SQL(Structured Query Language)是一种用于管理和操作数据库的强大语言,它被广泛应用于数据处理、数据分析以及数据存储等场景。本笔记将全面介绍SQL的基础概念、高级查询技巧以及常用的函数,旨在帮助初学者快速...

    SQL学习笔记(pdf)

    这份"SQL学习笔记"涵盖了SQL的基础概念、语法以及高级特性,是学习数据库管理和数据分析的宝贵资料。 1. **SQL基础** - 数据库概念:了解什么是数据库,它的作用以及数据库管理系统(DBMS)如何工作。 - SQL简介...

    sql注入笔记

    SQL 注入笔记 SQL 注入是一种常见的 Web 应用程序漏洞,攻击者可以通过inject恶意 SQL 代码来访问、修改或控制数据库中的数据。本文将详细介绍 SQL 注入的基本概念、检测方法和防御策略。 什么是 SQL 注入? SQL ...

Global site tag (gtag.js) - Google Analytics