一.简介
1. sql在编程中的应用
sql在应用程序中的三种接口类型:
模块语句——在程序中使用过程,该过程可以通过主调参数向主调函数返回值;
内嵌sql——可以编写程序的过程中内嵌sql语句。
直接调用——用程序直接实现。
2. 特性:连接到数据库,移动游标,动态sql,外连接
二.查询——select语句的使用
Select * from …… where……
Select distinct列名 from …… where
三.表达式,条件语句与运算
1. 数值型运算:数值型运算有加减乘除和取模等。
例如:select sale+0.15 from price
Select 列1-列2 from price
Select sale*0.8 from price
Select 列1/(%)列2 from price
2. 大于与大于等于 , 小于与小于等于,不等号(<>或!=)
例如:SELECT * FROM FRIENDS WHERE AREACODE>=300
SELECT * FROM FRIENDS WHERE FIRSTNAME <>‘ AL’
3. like 和下划线
a. 检索以BACK开头的记录:SQL>SELECT * FROM PARTS WHERE LOCATION LIKE ‘BACK%’
b. 通配符— — 下划线
查找所有以C开:SELECT * FROM FRIENDS WHERE STATE LIKE ‘C_’
c. 这两个通配符也可以联合起来使用
找出所有的第二个字母是L的记录:SELECT * FROM FRIENDS WHERE FIRSTNAME LIKE‘ _L%’
4. 逻辑运算 : and ,or not
5. 集合运算 union,intersect(相交),minus(相减)
Union将返回两个查询的结果并去除其中的重复部分:Select name from softball union select name from football
Union all不去掉重复的记录:Select name from softball union all select name from football
Intersect返回两个表中共有的行:Select name from softball intersect select name from football
6. 从属运算:in 和 between
Select * from friends where code in(100,381,204)
四.函数
1.汇总函数:count,sum。Ave,max,min,varianch(方差),stddev(标准差)
2.日期与时间函数:dateadd,datediff,datename,datepart,getdate
DateAdd(interval, number, date):返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔。
DateDiff(timeinterval,date1,date2):函数返回两个日期之间的差值
Datename(datepart,date):返回代表指定日期的指定日期部分的字符串。例如:SELECT datename(month, getdate()) AS 'Month Name'
Getdate():返回当前系统日期和时间。
3.数学函数
4.字符函数
6.其他函数
五、select中的字句
1.order by:排序 ,order by 列名 descc,order by 列名 ASC
2.group by:结果进行分组
例如:select payee,sum(mount),count(payee) from checks
Group by payee
3. having:对进行分组的数据进行限制
例如:select payee,sum(mount),count(payee) from checks
Group by payee
Having sum(mount)>100
(错误的表示:where sum(mount)>100)
六.表的联合
外部联合,内部联合,左联合,右联合,等值联合,不等值联合
1.交叉联合:select * from table1 ,table2 总行数=tb1行数*tb2行数
2. 等值联合:
SELECT O.ORDEREDON, O.NAME, O.PARTNUM ,P.PARTNUM ,P.DESCRIPTION
FROM ORDERS O, PART P
WHERE O.PARTNUM= P.PARTNUM (and O.PARTNUM=76)
3.不等值联合:SELECT O.NAME, O.PARTNUM ,P.PARTNUM, O.QUANTITY * P.PRICE TOTAL FROM ORDERS O, PART P
WHERE O.PARTNUM > P.PARTNUM
4. 内部联合:是指与个表内的行与本表内的数据相互进行联合,产生的结果行数取决于参加联合的行数,也就是说内部联合的行数取决于WHERE 子句的结果。
例如:SELECT P.PARTNUM, P.DESCRIPTION, P.PRICE, O.NAME ,O.PARTNUM
FROM PART P
JOIN ORDERS O
ON ORDERS.PARTNUM = 54
5. 外部联合:是表间的联合
SELECT P.PARTNUM ,P.DESCRIPTION, P.PRICE, O.NAME, O.PARTNUM FROM PART P
RIGHT OUTER JOIN ORDERS O (使用了RIGHT OUTER JOIN 它会令SQL 返回右边表集内的全部记录)
ON ORDERS.PARTNUM = 54
左联合的例子: SELECT P.PARTNUM, P.DESCRIPTION, P.PRICE, O.NAME ,O.PARTNUM
FROM PART P
LEFT OUTER JOIN ORDERS O
ON ORDERS.PARTNUM = 54
七.内嵌的sql字句
例如:SELECT * FROM TABLE1
WHERE TABLE1.SOMECOLUMN =somevalue
(SELECT SOMEOTHERCOLUMN FROM TABLE2
WHERE SOMEOTHERCOLUMN = SOMEVALUE)
1.在子查询中使用汇总函数:SELECT O.NAME ,O.ORDEREDON, O.QUANTITY * P.PRICE TOTAL FROM ORDERS O PART P
WHERE O.PARTNUM = P.PARTNUM AND
O.QUANTITY * P.PRICE> (SELECT AVG(O.QUANTITY * P.PRICE)
FROM ORDERS O, PART P WHERE O.PARTNUM = P.PARTNUM)
2.子查询的嵌套:嵌套就是将一个子查询嵌入到另一个子查询中去
Select .name,.address, .state from customer
Where name in (select name from orders o, part p where o.partnum=p.partnum
AND
O.QUANTITY * P.PRICE> (SELECT AVG(O.QUANTITY * P.PRICE)
FROM ORDERS O PART P
WHERE O.PARTNUM = P.PARTNUM))
3. 相关子查询:
4.exists:如果子查询返回的内容为非空时EXISTS 返回TRUE ,否则返回FALSE
SELECT NAME ,ORDEREDON FROM ORDERS WHERE EXISTS
(SELECT * FROM ORDERS WHERE NAME ='TRUE WHEEL')
5.Some ,all ,any