SQL_3_表达式、条件语句与运算
加号的两种用法:
1.在SELECT子句中使用+号以执行对数据的运算并将结果显示出来。
SELECT ITEM WHOLESALE WHOLESALE+0.15 FROM PRICE;
还可以重命名新增的列
2.在WHERE子句中使用加号,在WHERE子句中使用操作符可以在当你对数据有特定条件时具有更大的灵活性
减号也同样有两种用途
1.第一种作为负号使用
SELECT STATE -HIGHTEMP LOWS, -LOWTEMP HIGHS FROM HILOW;
2.作为减号,从某一列中减去另一列
SELECT STATE,HIGHTEMP LOWS,LOWTEMP HIGHS,(LOWTEMP-HIGHTEMP) DIFFERENCE FROM HILOW;
在数据库领域内NULL的意义就是在一个字段中没有数据,这与字段为零或者为空不是同一个概念,零和空是一种特殊的数值,而NULL则表示啥也没有。如果你想进行Field=9的比较而Field字段是空的,那么比较的结果就会返回Unknow。由于Unknow是一种不正常的状态,所以大多数SQL都会置其为无效并提供一种叫IS NULL的操作来测试Null的存在。
!=和<>都表示不等于
LIKE: 模糊匹配,且对大小写敏感,正如当初所说的涉及到数据时总是大小写敏感的。
SELECT * FROM PARTS WHERE LOCATION LIKE '%BACK%';
当查找在某一特定位置上有字符的数据时,可以使用通配符_下划线。
查找以A开头的:SELECT * FROM PARTS WHERE LOCATION LIKE 'A_';
查找第二个字母为L的记录:SELECT * FROM PARTS WHERE LOCATION LIKE '_L%';
SELECT LASTNAME || ',' || FIRSTNAME NAME FROM FRIENDS;
逻辑运算
找出B开头的员工,且休假时间超过了50天的员工:
SELECT LASTNAME,YEARS*12-LEAVETABKEN REMAINING FROM VACATION WHERE LASTNAME LIKE 'B%' AND YEARS*12-LEAVETABKEN >50;
OR:或者
NOT:取反。SELECT * FROM PARTS WHERE LOCATION NOT LIKE '_L%';
SELECT * FROM PRICE WHERE WHOLESALE IS NOT NULL;
集合操作:
两个执勤人员表FOOTBALL和SOFTBALL:
UNION: 将返回两个查询的结果并去除其中的重复部分。
查看 表中有哪些不重复的人员:SELECT NAME FORM FOOOTBALL UNION SELECT NAME FROM SOFTBALL;
查看表中共有多少人,包括重复的:SELECT NAME FORM FOOOTBALL UNION ALL SELECT NAME FROM SOFTBALL;
INTERSECT(相交):返回两个表中共有的行。
查看两个表中都存在的人员:SELECT * FROM FOOTBALL INTERSECT SELECT * FROM SOFTBALL;
MINUS(相减):返回存在于第一个表中但不存在于第二个表中的记录。
查看不在垒球中的足球队员:SELECT * FROM FOOTBALL MINUS SELECT * FROM FOOTBALL;
IN:从属运算
查找在CO,CA,LA城市的朋友:SELECT * FROM FRIENDS WHERE STATE='CO' OR STATE='CA' OR STATE='LA';
等价于:SELECT * FROM FRIENDS WHERE STATE IN ('CO','CA','LA');
BETWEEN:从属运算
查找价格在0.25和0.75之间的记录:SELECT * FROM PRICE WHERE WHOLESALE>0.25 AND WHOLESALE<0.75;
等价于:SELECT * FROM PRICE WHERE WHOLESALE BETWEEN 0.25 AND 0.75
仍然是无问题不进步:
根据下表FRIENDS回答问题:
1.写一下查询返回数据库中所有名字以M 开头的每一个人。
SELECT * FROM FRIENDS WHERE LASTNAME LIKE "M%";
2.写一个查询返回数据库ST 为LA 且FIRSTNAME 以AL 开头的人。
SELECT * FROM FRIENDS WHERE ST="LA" AND FIRSTNAME="AL%";
3.给你两个表PART1 和PART2 你如何才能找出两个表中的共有元素请写出查询。
SELECT * FROM PART1 INTERSECT SELECT * FROM PART2;
4.WHERE a >= 10 AND a <=30 的更便捷写法是什么请写出来?
WHERE BETWEEN 10 AND 30
注意::不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。至于包括不包括两头的值,还需要查询自己的数据库。