SQL语句

  • 格式:doc
  • 大小:106.00 KB
  • 文档页数:22

SQL语句多表查询:SELECT a.id AS 学号 b.number AS 序号FROM student a,teacher b;SELECT * FROM A,B WHERE name (NOT)IN (‘dfs’,’dfs’); SELECT * FROM student WHERE num (NOT)BETWEEN 20 AND 30;联合查询:SELECT id FROM A UNION SELECT number FROM B;日期:SELECT * FROM student WHERE MONTH(出生日期)=MONTH(GETDATE());查询员工的年龄:SELECT 年龄=DATEDIFF(yy,出生日期,GETDA TE()) FROM student;查询前N名:SELECT TOP 1 id,number FROM student ORDER BY id (DESC);查询前20%: SELECT TOP 20 PERCENT id,number FROM student ORDER BY id;查询平均工资最高的前3个部门:SELECT TOP 3 部门AS 平均工资最高的三个部门A VG(目前薪资) AS 平均薪资FROM 管理局GROUP 部门ORDER BY 2 DESC;查询业绩最佳的前3名业务员(自然连接)SELECT TOP 3 员工编号,a.姓名AS 业务员姓名,SUM(c.单价*c.数量*(1-c.折扣))AS 销售总额FROM 员工a INNER JOIN 订货文件b INNER JOIN 订货明细cON b.订单号码=c.订单号码GRTOUP BY a.员工编号,a.姓名ORDER BY 3 DESC;存在于子查询的测试:SELECT A.id FROM A WHERE (NOT) EXISTS(SELECT* FROM b WHERE a.number=’001’;) 包含于子查询的测试:SELECT a.number FROM student a WHERE a.number NOT IN(SELECT number FROM teache) 子查询的全部测试:SELECT A.num FROM A WHERE A.num >ALL(ANY)(SELECT B.num FROM B WHERE num>1);数据分组小计:SELECT COUNT(DISTINCT id) AS 总数,MAX(工资) AS 最高工资,MIN(工资)AS 最低工资,A VG(工资)AS 平均工资,SUM(工资)AS 工资总额 FROM A; DISTINCT是去掉某一字段具有相同值的记录查询使用相同的姓名及人数:SELECT 姓名AS 重复姓名COUNT(*)AS 重复的人数FROM stu GROUP BY(姓名) HA VING COUNT(*)>1;排序:ORDER BY:SELECT id AS 学号,name AS 姓名FROM student ORDER BY 1(或学号);字符和通配符冲突时的解决方法:查询地址中包含_*的记录: ESCAPE指定的转义符为\,SELECT * FROM student WHERE address LIKE ‘%\_\*%’ESCAPE’\’中括号的使用[]:查询第一个字母不介于h-k之间且后两个字母为om的姓名:SELECT name FROM student WHERE name LIKE ‘[^H-K]om’;下划线查询第二个字为’国’的姓名:SELECT * FROM student WHERE name LIKE ‘_国%’;查询的目的地:SELECT * INTO teach FROM student WHERE name IN (‘BIL Y’,’TOM’);插入数据:INSERT INTO number V ALUES((SELECT id FROM A WHERE id=’01’),’tom’); INSERT student SELECT * FROM teach WHERE name IN(‘DS’,’DSF’);修改数据:UPDATE A SET number=(SELECT num FROM b WHERE num=’001’) WHERE number=’002’;UPDATE A SET id=’1’ FROM (SELECT TOP 10 FROM teach ORDER BY id)AS BWHERE =;删除数据:DELETE FROM A WHERE number IN (SELECT num FROM B WHERE num=’002’);计算比例的SQL语句1,select cast(100.0*本期接收数/(select sum(本期接收数) from tbl) as varchar(10))+'%' as 接收比例,from tbl2,select cast(100.0*count(*)/(select count(*) from table1) as float(6)) as 比例from table1 group by names having count(*)>03,convert(numeric(20,4),wfs_activity_fee.amount * ExpenseRation/100 )4, select convert(varchar(10),cast(100.0*count(*)/(select count(*) from table1) as numeric(20,2)))+'%' as 比例 from table1 group by names having count(*)>0类型转换orround()函数截取24, 1.字符串函数长度与分析用datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格substring(expression,start,length) 不多说了,取子串right(char_expr,int_expr) 返回字符串右边int_expr个字符字符操作类upper(char_expr) 转为大写lower(char_expr) 转为小写space(int_expr) 生成int_expr个空格replicate(char_expr,int_expr)复制字符串int_expr次reverse(char_expr) 反转字符串stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从start开始的length个字符用char_expr2代替ltrim(char_expr) rtrim(char_expr) 取掉空格ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符字符串查找charindex(char_expr,expression) 返回char_expr的起始位置patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0col19= stuff(col019, charindex(p,col019),4,’’)2.数学函数abs(numeric_expr) 求绝对值ceiling(numeric_expr) 取大于等于指定值的最小整数exp(float_expr) 取指数floor(numeric_expr) 小于等于指定值得最大整数pi() 3.1415926.........power(numeric_expr,power) 返回power次方rand([int_expr]) 随机数产生器round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入sign(int_expr) 根据正数,0,负数,,返回+1,0,-1sqrt(float_expr) 平方根3.日期函数getdate() 返回日期datename(datepart,date_expr) 返回名称如Junedatepart(datepart,date_expr) 取日期一部份datediff(datepart,date_expr1.dateexpr2) 日期差dateadd(datepart,number,date_expr) 返回日期加上number上述函数中datepart的写法取值和意义yy 1753-9999 年份qq 1-4 刻mm 1-12 月dy 1-366 日dd 1-31 日wk 1-54 周dw 1-7 周几hh 0-23 小时mi 0-59 分钟ss 0-59 秒ms 0-999 毫秒日期转换convert()convert(varchar(20),cast(‘2009-09-05’as datetime),102) SQLserver中用convert函数转换日期格式SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm例如:select getdate()2004-09-12 11:06:08.177整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 举例如下:select CONVERT(varchar, getdate(), 120 )2004-09-12 11:06:08select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')20040912110608select CONVERT(varchar(12) , getdate(), 111 )2004/09/12select CONVERT(varchar(12) , getdate(), 112 )20040912select CONVERT(varchar(12) , getdate(), 102 )2004.09.12select CONVERT(varchar(12) , getdate(), 101 ) 09/12/2004select CONVERT(varchar(12) , getdate(), 103 ) 12/09/2004select CONVERT(varchar(12) , getdate(), 104 ) 12.09.2004select CONVERT(varchar(12) , getdate(), 105 ) 12-09-2004select CONVERT(varchar(12) , getdate(), 106 ) 12 09 2004select CONVERT(varchar(12) , getdate(), 107 ) 09 12, 2004select CONVERT(varchar(12) , getdate(), 108 ) 11:06:08select CONVERT(varchar(12) , getdate(), 109 ) 09 12 2004 1select CONVERT(varchar(12) , getdate(), 110 ) 09-12-2004select CONVERT(varchar(12) , getdate(), 113 ) 12 09 2004 1select CONVERT(varchar(12) , getdate(), 114 ) 11:06:08.177select getdate()结果:2003-12-28 16:52:00.107select convert(char(8),getdate(),112)结果:20031228select convert(char(8),getdate(),108)结果:16:52:00select convert(char(8),getdate(),112)|指日期格式规则如下:1 101 美国mm/dd/yyyy2 102 ANSI yy.mm.dd3 103 英国/法国dd/mm/yy4 104 德国dd.mm.yy5 105 意大利dd-mm-yy6 106 - dd mon yy7 107 - mon dd, yy8 108 - hh:mm:ss- 9 或109 (*) 默认值+ 毫秒mon dd yyyy hh:mi:ss:mmmAM(或PM)10 110 美国mm-dd-yy11 111 日本yy/mm/dd12 112 ISO yymmdd- 13 或113 (*) 欧洲默认值+ 毫秒dd mon yyyy hh:mm:ss:mmm(24h)14 114 - hh:mi:ss:mmm(24h)- 20 或120 (*) ODBC 规范yyyy-mm-dd hh:mm:ss[.fff]- 21 或121 (*) ODBC 规范(带毫秒)yyyy-mm-dd hh:mm:ss[.fff]- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)- 130* 科威特dd mon yyyy hh:mi:ss:mmmAM- 131* 科威特dd/mm/yy hh:mi:ss:mmmAM关于Emaker中字段的格式转换和字段间的运算代码可以加到属性里的“格式转换(读出)”和“格式转换(写入)”,table字段设定里的“字段”位置也可以灵活加函数。