SQL平常使用(2)

SQL平常使用(2)

  • 匹配空值

NULL和非匹配和非匹配通过过滤选择不包含指定值的所有行时,你可能希望返回含NULL值的行。但是这做不到。因为未知(unknown)有特殊的含义,数据库不知道它们是否匹配,所以在进行匹配过滤或非匹配过滤时,不会返回这些结果。

  • 操作符AND

选择出name=0001和价格为10的数据

select a.* from product a where a.name=0001 and a.price=10;
  • 操作符OR

选择出name=0001或者价格为10的数据

select a.* from product a where a.name=0001 or a.price=10;
  • AND 和OR 求值顺序
    首先计算AND的值,后计算OR
select a.* from product a where a.name=0001 
   			or a.price=10 and a.name=0002;

选出价钱为10和名称为0002的数据,然后再选择名称为0001的值,合在一起才是这个sql语句的值。

select a.* from product a
  			 where (a.name=0001 or a.price=10)
  			 and a.name=0002;

加上括号意思就变了。(不用解释吧…)

  • 操作符IN
select a.* from product a where a.name in (0001,0002);
  • 操作符NOT
select a.* from product a where a.name not in (0001,0002);
  • 操作符LIKE
    耗费cpu资源大,查找时间长,在实际代码中不大量推荐使用。

    通配符%,可以选择出值存在于%范围内的数据。

select a.* from product a 
   	where a.name like '%ww%';

转义字符:
默认为,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符
需求:查看员工名字中包换一个_的员工id和工资
注意:_是一个特殊字符,所以要转义

    select id,last_name,salary
    from s_emp
    where last_name like '%\_%' escape '\';

通配符%,可以选择出值存在于%范围内的数据。
%并不能把任何情况都筛出来,其中NULL值就无法筛出来

select a.* from product a 
  	where a.name like 'ww_';

_代表一个字符

拼接字段 ||和concat

不同的数据库可能不一样。

select a.name||a.id,a.* from product a ;
select trim(a.name) || trim(a.id),a.* from product a ;

说明:TRIM函数函数大多数DBMS都支持RTRIM()(去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及TRIM()(去掉字符串左右两边的空格)

concat 也可以拼接字符串。

select concat(a.name.a.id),a.* from product a ;
  • 起别名(有些人说oracle不支持as,但我尝试后发现支持,可能在旧版不支持)
select (a.name||a.id) as name1,a.* from product a ;

函数

  • to_char,to_number
    SELECT order_num FROM Orders WHERE to_number(to_char(order_date,'YYYY')) = 2012;
    在这个例子中,to_char()函数用来提取日期的成分,to_number()用来将提取出的成分转换为数值,以便能与2012进行比较.
  • to_date
SELECT order_num FROM Orders WHERE order_date
 BETWEEN to_date('01-01-2012') AND to_date('12-31-2012');
  • 聚集函数
聚集函数 解释
AVG() 返回某列平均值
COUNT(*) 返回某列行数
MAX() 返回某列最大值
MIN() 返回某列最小值
SUM() 返回某列的和
SELECT AVG(prod_price) AS avg_price 
FROM Products WHERE vend_id='DLL01‘;
  • 分组(group by)
SELECT vend_id,COUNT(*) AS num_prods 
FROM Products GROUP BY vend_id;

过滤分组(having字句)

SELEC Tcust_id,COUNT(*) AS orders
FROM Orders 
GROUP BY cust_id 
HAVING COUNT(*)>=2;

说明:HAVING和和WHERE的差别的差别这里有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。

SELECT vend_id,COUNT(*) AS num_prods 
FROM Products 
WHERE prod_price>=4 
GROUP BY vend_id
HAVING COUNT(*)>=2;
  • 子查询
    报错单行查询返回多列,请自行查找原因。字面意思,肯定写错了。
SELECT cust_id
 FROM Orders 
 WHERE order_num IN ( 
 				SELECT order_num 
 				FROM OrderItems
 				WHERE prod_id ='RGAN01');

字段显示格式
Column 字段名 format 格式;
column 字段名 format 格式;
把last_name显示10个长度

  column last_name format a10;

a:代表处理的是字符
注意:a不能用来处理数字
column指令的作用范围:当前会话

清除格式效果:
column 字段名 clear;
可以简写为:col

猜你喜欢

转载自blog.csdn.net/qq_42150316/article/details/88777560
今日推荐