① sql按1月2月3月Q1 4月5月6月Q2...排序问题
加个order by case
when 年季月='Jan''13' then 1
when 年季月='Feb''13' then 2
when 年季月='Mar''13' then 3
when 年季月='Q1''13' then 4
when 年季月='Apr''13' then 5
when 年季月='May''13' then 6
when 年季月='Jun''13' then 7
when 年季月='Q2''13' then 8
when 年季月='Jul''13' then 9
when 年季月='Aug''13' then 10
when 年季月='Sep''13' then 11
when 年季月='Q3''13' then 12
when 年季月='Otc''13' then 13
when 年季月='Nov''13' then 14
when 年季月='Dec''13' then 15
when 年季月='Q4''13' then 16
else 17
end
如果很多地方需要按这个次序排序,那就建个表,存放次序与年季月的对应数据
② 数据库中常用的sql语句有哪些
1.检索数据
SELECT prod_nameFROM Procts;
#检索单列
SELECT prod_id, prod_name, prod_priceFROMProcts;
#检索多列
SELECT * FROM Procts;
#检索所有列
SELECT DISTINCTvend_id FROMProcts;
#检索不同的值
SELECTprod_name FROM Procts LIMIT 5;
#返回不超过5行数据
SELECTprod_name FROM Procts LIMIT 5 OFFSET 5;
#返回从第5行起的5行数据。LIMIT指定返回的行数,LIMIT带的OFFSET指定从哪儿开始。
2.排序检索数据
SELECTprod_name
FROMProcts
ORDER BYprod_name;
#排序数据
SELECT prod_id, prod_price, prod_name
FROMProcts
ORDER BY prod_price, prod_name;
#按多个列排序
SELECT prod_id, prod_price, prod_name
FROMProcts
ORDER BY 2, 3;
#按列位置排序,第三行表示先按prod_price, 再按prod_name进行排序
SELECT prod_id, prod_price, prod_name
FROMProcts
ORDER BY prod_priceDESC, prod_name;
#prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序
3.过滤数据
SELECT prod_name, prod_price
FROMProcts
WHERE prod_price< 10;
#检查单个值
SELECT prod_name, prod_price
FROMProcts
WHERE vend_id <> ‘DLL01’;
#不匹配检查
SELECT prod_name, prod_price
FROMProcts
WHERE prod_priceBETWEEN 5 AND 10;
#范围值检查
SELECT cust_name
FROMCUSTOMERS
WHERE cust_emailIS NULL;
#空值检查
4.高级数据过滤
SELECTprod_id, prod_price, prod_name
FROMProcts
WHERE vend_id = ‘DLL01’ANDprod_price <= 4;
#AND操作符
SELECTprod_name, prod_price
FROMProcts
WHEREvend_id=’DLL01’ OR vend_id=’BRS01’;
#OR操作符
SELECTprod_name, prod_price
FROMProcts
WHERE (vend_id = ’DLL01’ORvend_id=’BRS01’)
ANDprod_price >= 10;
#求值顺序 AND的优先级高于OR
SELECTprod_name, prod_price
FROMProcts
WHERE vend_idIN (‘DLL01’,’BRS01’)
ORDER BY prod_name;
#IN操作符
SELECT prod_name
FROMProcts
WHERE NOTvend_id = ‘DLL01’
ORDER BY prod_name;
#NOT 操作符
SELECT prod_name
FROMProcts
WHEREvend_id <> ‘DLL01’
ORDER BY prod_name;
#NOT 操作符
③ sql语句的and和or怎么确定执行的先后顺序
sql语句的and和or运算符属于相同优先级,按结合性进行从左到右结合。
在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。
优先级从高到低依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一优先级的运算符按结合性进行从左到右结合。
(3)sql操作符排序扩展阅读:
每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。当多种运算符出现在同一个表达式中时,应该先按照不同类型运算符间的优先级进行运算。
各种运算符间的优先级如下:数值运算符、字符串运算符、关系运算符、逻辑运算符。可以用括号改变优先级顺序,使得括号内的运算优先于括号外的运算。对于多重括号,总是由内到外强制表达式的某些部分优先运行。括号内的运算总是最优先计算。
④ 以下哪一类操作符在sql语句中的优先级最高
大概就是下面这个样子的
sql样例:
select *columns* from *tables*
where *predicae1*
group by *columns*
having *predicae1*
order by *columns*
limit *start*, *offset*;
执行顺序:
1、from *tables*
2、where *predicae1*
3、group by *columns*
4、having *predicae1*
5、select *columns*
6、order by *columns*
7、limit *start*, *offset*
⑤ SQL里面的排序语句desc和ASC有什么区别
SQL 语句中, asc是指定列按升序排列,desc则是指定列按降序排列。
排序子句语法:order by 列名 asc/desc
例表格:tt
select*fromttorderbyn1asc,n2desc;
⑥ 数据库操作select语句使用and和or操作符计算次序问题
例句:select 列名 from 表名 where 条件1 or 条件2 and 条件3
SQL在处理or操作符之前,优先处理and操作符,如此例中,会优先查找满足条件2和条件3的数据,然后再查找出满足条件1的.若要解决这个问题,可以使用圆括号明确的分组相应的操作符.
如:select 列名 from 表名 where ( 条件1 or 条件2 ) and 条件3
注意:在使用具有AND和OR操作符的where子句中都应使用圆括号明确的分组操作符,不要过分依赖默认计算次序,即使它确实是你想要的东西也是如此.使用圆括号没有什么坏处,它能消除歧义.
⑦ SQL必知必会(第五版)
去重 :使用DISTINCT关键字,它必须直接放在列名的前面。
检索前5行数据:
LIMIT 5 OFFSET 5指示MySQL等DBMS返回从第5行起的5行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始。
2.1 排序数据
注意: ORDER BY 子句的位置在指定一条ORDER BY子句时,应该保证它是 SELECT语句中最后一条子句 。如果它不是最后的子句,将会出错。
ORDER BY 2, 3表示先按prod_price,再按prod_name进行排序。
好处在于不用重新输入列名。
缺点。首先,不明确给出列名有可能造成错用列名排序。其次,在对SELECT清单进行更改时容易错误地对数据进行排序(忘记对ORDER BY子句做相应的改动)。最后,如果进行排序的列不在SELECT清单中,显然不能使用这项技术。
DESC 是DESCENDING的缩写,这两个关键字都可以使用。与DESC相对的是 ASC (或ASCENDING),在升序(A→Z)排序时可以指定它。但实际上,ASC没有多大用处,因为升序是默认的(如果既不指定ASC也不指定DESC,则假定为ASC)。
DESC关键字只应用到直接位于其前面的列名。如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。
在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。
提示: 单引号用来限定字符串。如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不用引号。
操作符(operator) 用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logicaloperator)。
AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。
一个AND子句,只有两个过滤条件。可以增加多个过滤条件,每个条件间都要使用AND关键字。
ORDER BY子句,放在WHERE子句之后。
OR: WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。
圆括号具有比AND或OR操作符更高的优先级。
任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。
IN:WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。
IN操作符一般比一组OR操作符执行得更快。
IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。
NOT: WHERE子句中用来否定其后条件的关键字。
通配符(wildcard) 用来匹配值的一部分的特殊字符。
搜索模式(search pattern) 由字面值、通配符或两者组合构成的搜索条件。
说明:区分大小写根据DBMS的不同及其配置,搜索可以是区分大小写的。如果区分大小写,则’fish%’与Fish bean bag toy就不匹配。
除了能匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。
'%’不会匹配名称为NULL的行。
下划线的用途与%一样,但它只匹配单个字符,而不是多个字符。
与%能匹配多个字符不同,_总是刚好匹配一个字符,不能多也不能少。
此语句的WHERE子句中的模式为’[JM]%'。这一搜索模式使用了两个不同的通配符。[JM]匹配方括号中任意一个字符,它也只能匹配单个字符。因此,任何多于一个字符的名字都不匹配。[JM]之后的%通配符匹配第一个字符之后的任意数目的字符,返回所需结果。
也可以使用NOT操作符得出类似的结果。^的唯一优点是在使用多个WHERE子句时可以简化语法:
例如:
拼接(concatenate)
将值联结到一起(将一个值附加到另一个值)构成单个值。
操作符可用加号(+)或两个竖杠(||)表示。
说明:是+还是||?SQL Server使用+号。DB2、Oracle、PostgreSQL和SQLite使用||。在MySQL和MariaDB中,必须使用特殊的函数。
说明: TRIM函数 大多数DBMS都支持 RTRIM() (去掉字符串右边的空格)、 LTRIM() (去掉字符串左边的空格)以及 TRIM() (去掉字符串左右两边的空格)。
SQL支持列别名。 别名(alias) 是一个字段或值的替换名。别名用 AS 关键字赋予。
AS关键字可选,最好用它。
提示:如何测试计算
SELECT语句为测试、检验函数和计算提供了很好的方法。虽然SELECT通常用于从表中检索数据,但是省略了FROM子句后就是简单地访问和处理表达式,例如SELECT 3*2;将返回6,SELECT Trim(' abc ');将返回abc,SELECT Curdate();使用Curdate()函数返回当前日期和时间。
UPPER()函数: 将文本转换为大写。
SQL函数不区分大小写,因此upper(), UPPER(), Upper()都可以,substr(), SUBSTR(), SubStr()也都行。
⑧ sql server中运算符的优先等级从高到低的排列是怎样的
大到小依次是 算数运算符、逻辑运算符、比较运算符、赋值运算符。