MySQL基础2

1、SELECT:作为SQL组成部分的保留字,它的用途是从一个或者多个表中检索信息,关键字SELECT不能用作表或者列的名字。使用SELECT语句,必须至少给出两条信息----想选择什么,以及从什么地方选择。

下面实际操作SELECT语句的使用。

(1)SELECT检索单个列

创建mydata数据库,在数据库中创建如下5张表,表的创建在此处获取http://www.forta.com/books/0672336073/

使用 SELECT prod_name FROM Products; 检索单个列,结果如下

(2)SELECT检索多个列

要想从一个表中检索多个列,仍然使用相同的SELECT语句。唯一的不同是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。下面的SELECT语句从Products表中选择3列

SELECT prod_id,prod_name,prod_price FROM Products;

(3)检索所有列:给定一个通配符 × ,则返回表中所有列

SELECT * FROM Products;

 

2、去重语句,SELECT语句返回所有匹配的行,但是如果有重复的语句出现,该如何处理?如上图所示,如果想要筛选出vend_id列中不同的列值,这就需要使用DISTINCT语句。

SELECT DISTINCT vend_id FROM Products;

SELE只返回不同(具有唯一性)的vend_id行。如果使用DISTINCT关键字,它必须放在列名的前面。SELECT关键字作用于所有的列,不仅仅是跟在其后的那一列。

3、返回前N行语句

SELECT语句返回指定表中所有匹配的行,如果只想返回第一行或者一定数量的行,可以使用LIMIT关键字来限制最多返回多少行。注意:不同的DBMS关键字不同。

SELECT prod_name FROM Products LIMIT 5;

上述使用SELECT语句检索单独的一列数据,LIMIT 5表示返回不超过5行的数据。

为了得到后面的5行数据,需要指定从哪开始以及检索的行数,如下图

SELECT prod_name FROM Products LIMIT 5 OFFSET 5;

LIMIT 5 OFFSET 5 返回从第五行起的5行数据,第一个数字是限制检索的行数,第二个数字是限制从哪开始,products表中只有9行数据,所以只返回了4行数据。

4、注释

很多DBMS都支持各种形式的注释语法。

行内注释:注释使用 -- (两个连字符)嵌在行内,-- 之后的文本就是注释。

在一行的开始处使用# ,这一整行都作为注释。也可以使用/**/进行多行注释。

5、数据排序

SQL语句返回某个数据库表的单个列,其输出并没有特定的顺序。为了明确地对SELECT语句检索出来的数据进行排序,可以使用ORDER BY字句取一个或者多个列的名字,对输出进行排序。

SELECT prod_name FROM Products ORDER BY prod_name;

注意:ORDER BY字句的位置,在指定一条ORDER BY字句时,应该保证它是SELECT语句最后一条字句,否则会出现错误。

5.2按多个列排序:要按照多个列排序,简单指定列名,列名之间用逗号隔开。

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

 

过滤数据

6、使用WHERE字句

在SELECT语句中,根据WHERE字句中指定的搜索条件进行过滤,WHERE字句在表名(FROM字句)之后给出。

SELECT prod_name,prod_price FROM Products WHERE prod_price = 3.49;

 

7、范围值检查

要检查某个范围的值,可以使用BETWEEN操作符,该操作符需要两个值,即范围的开始值和结束值。如下图

SELECT prod_name,prod_price FROM Products where prod_price BETWEEN 5 AND 10;

从这个例子可以看出,在使用BETWEEN时,必须指定两个值——所需范围的低端值和高端值,这两个值必须使用AND关键字分隔,BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。

8、组合WHERE字句

为了进行更强的过滤控制,SQL允许给出多个WHERE字句,这些字句有两种使用方式,即以AND字句或OR字句的方式使用。

如下语句选择的是vend_id 与DLL01相等 并且 prod_price <= 4 的数据。

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

OR操作符与AND操作符正好相指反,它指示DBMS检索匹配任一满足条件的行。

9、求值顺序

WHERE字句可以包含任意数目的AND 和 OR 操作符,允许两者结合以进行复杂、高级的过滤,允许使用括号对操作符进行明确分组。但是需要注意,AND在求值过程中优先级更高。

例:现在需要列出价格为10美元及以上,且由DLL01或者BRS01制造的所有产品。

SELECT prod_name,prod_price FROM Products where prod_price >= 10 AND (vend_id = 'DLL01' OR vend_id = 'BRS01');

10、IN操作符

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配,IN取一组由逗号分割、括在圆括号中的合法值。

SELECT prod_name,prod_price FROM Products WHERE vend_id IN ('DLL01','BRS01') ORDER BY prod_name;

 

通配符


11、通配符(wildcard)用来匹配值的一部分的特殊字符。

11.1百分号(%)通配符

在搜索串中,%表示任何字符出现任意次数,例如为了找出所有以词Fish起头的产品,可以使用以下语句。

SELECT prod_id ,prod_name FROM Products WHERE prod_name LIKE 'Fish%';

 

11.2 下划线( _ )通配符

下划线的用途与%一样,但是它只匹配单个字符,而不是单个字符。

11.3 方括号([ ])通配符:用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。

SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%' ORDER BY cust_contact;

使用函数处理数据

12、文本处理函数

UPPER()将文本转换为大写。使用示例如下:

SELECT vend_name ,UPPER(vend_name) AS vend_name_space FROM Vendors ORDER BY vend_name;

13、日期和时间处理函数

日期和时间采用相应的数据类型存储在表中,每种DBMS都有自己的特殊形式,日期和时间以特殊的格式存储,以便于能够快速和有效的排序或者过滤,并且节省物理存储空间。举例说明日期处理函数的用法。

SELECT order_num FROM Orders WHERE YEAR(order_date)=2012;

汇总数据

14、聚集函数(aggregate function):对某些行运行的函数,计算并返回一个值

我们经常需要汇总数据,但是却并不需要吧他们实际检索出来,为此SQL专门设计了此类函数。

14.1 AVG() 函数:返回某列的平均值

SELECT AVG(prod_price) AS avg_price FROM Products;

14.2COUNT()函数:返回指定列的行数

SELECT COUNT(*) AS num_cust FROM Customers;

将圆括号中的星号换成指定列的名称,即可求得那列的行数

14.3 MAX()函数:返回指定列中的最大值。

SELECT MAX(prod_price) AS max_price FROM Products;

14.3 MIN()函数:与MAX()函数相反,返回指定列的最小值。

SELECT MIN(prod_price) AS min_price FROM Products;

14.4 SUN()函数:返回指定列的和

SELECT SUM(quantity) AS items_orderd FROM OrderItems WHERE order_num = 20005;

15、聚集不同值

以上5个函数,对所有执行的计算,指定ALL参数或不指定参数(ALL是默认)。对于只需要不同的值用作计算处理,指定DISTINCT参数即可。

分组数据

16、GROUPBY 字句

分组是使用SELECT语句的GROUPBY字句建立的。看下面的例子。

SELECT vend_id ,COUNT(×) AS num_prods FROM Products GROUP BY vend_id;

SELECT语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段。GROUP BY()字句指示DBMS按照vend_id排序并且分组数据。

 

附在实际面试中遇到的一道面试题:

MySQL的优化方式有哪些?

Mysql的优化,大体可以分为三部分:索引的优化,sql语句的优化,表的优化

1.索引的优化
    只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引
    尽量使用短索引,如果可以,应该制定一个前缀长度
    对于经常在where子句使用的列,最好设置索引,这样会加快查找速度
    对于有多个列where或者order by子句的,应该建立复合索引
    对于like语句,以%或者‘-’开头的不会使用索引,以%结尾会使用索引
    尽量不要在列上进行运算(函数操作和表达式操作)
    尽量不要使用not in和<>操作
 

2.sql语句的优化
    查询时,能不要*就不用*,尽量写全字段名
    大部分情况连接效率远大于子查询
    多使用explain和profile分析查询语句
    查看慢查询日志,找出执行时间长的sql语句优化
    多表连接时,尽量小表驱动大表,即小表 join 大表
    在千万级分页时使用limit
    对于经常使用的查询,可以开启缓存
 

3.表的优化

  • 表的字段尽可能用NOT NULL
  • 字段长度固定的表查询会更快
  • 把数据库的大表按时间或一些标志分成小表
  • 将表分区
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值