MySQL和MSSQL的比较(七)--查询
这是一个MySQL和MSSQL对比学习经验(七)是相同的,相同的地方把稍有不同的地方,我举一个例子,谢谢你的支持(一_ O U)O
本节主要介绍mysql中的基本查询(mysql官方参考手册)
MySQL中选择的基本语法形式:
选择属性列表
从表名和视图列表
{条件表达式}
{按属性的名称{有条件表达式
{属性名{ } } ASC |降序顺序
{限制,行数}
解释uff1a
WHERE子句:根据条件表达式指定的条件进行查询。
按组子句:按属性名称指定的字段分组。
有子句:对有子句有一个组,只有当条件表达式中指定的条件满足时才可以输出。
按组子句通常与聚合函数一起使用,如计数()、和()等。
ORDERBY子句:排序的属性名称指定的字段,排序的方式是通过ASC和DESC两参数指出,和默认的是由ASC,这些排序,升序。
设置测试表
创建测试表
创建表的水果
(
f_id char(10)不为空,
s_id INT NOT NULL,
f_name char(255)不为空,
f_price十进制(8,2)不为空,
主键(f_id)
)
插入测试数据
插入水果(f_id,s_id,f_name,f_price)
值(步骤,101,'apple ',5.2),
('b1 ',102,'blackberry ',5.2),
('bs1 ',105,'orange ',5.2),
('bs2 ',103,'melon ',5.2),
('t1 ',106,'banana ',5.2);
使用select语句查询的f_id字段的数据
选择f_id,f_name水果
注意:MySQL中的SQL语句不区分大小写,因此select和select函数是相同的。
这是因为SQLServer相同!
常见的查询
从水果中选择*
选择f_id,水果,f_price > 5.1 f_name
选择f_id,水果,s_id在f_name(101102)
选择f_id,水果,s_id不f_name(101102)
选择f_id,水果在2和10之间f_name f_price
选择f_id,水果在2和10之间f_price不f_name
类字符匹配查询
1%,通配符%,与任意长度字符匹配,包括零字符。
选择f_id,f_name水果,f_name like'b % y
2、_可以匹配任何下划线通配符,每次一个字符
下面的语句有四个下划线
选择f_id,水果,f_name像'____nf_name
以同样的方式,也有一些在SQLServer
使用{ }
去
SELECT * FROM { } { }在AAA dbo。{名称} like's _____
查询空值
创建表的客户
(
c_id INT NOT NULL auto_increment,
c_name char(25)不为空,
c_city char(50)空,
主键(c_id)
)
插入客户(c_name,c_city)
值('liming ',中国'),
('hongfang,null)
选择*从哪里c_city是客户零
选择*从客户那里c_city不空
和,或者,关键字
选择f_id,水果,f_name像'____n'and f_id = 'bs2 f_name
选择f_id,水果,f_name像'____n'or f_id = 'bs2 f_name
选择不同的s_id水果
组
选择s_id,计数(1)总s_id水果组
再插入两条记录
插入水果(f_id,s_id,f_name,f_price)
值('a6 ',101,'cherry ',6),
('a8 ',102,'coconut ',7)
如果你想看到各供应商提供的水果品种名称,MySQL可以使用group_concat()组中的功能,
显示每个组中每个字段的值。
选择s_id,group_concat(f_name)的s_id水果组名称
SQLServer没有group_concat()函数,和SQLServer需要使用XML功能来达到相同的效果,而MySQL是做得很好
具有:过滤包
分组数据成果表的基础上s_id显示超过1的水果包信息
选择s_id,group_concat(f_name)的s_id具有水果的组名
利用组汇总
选择s_id,计数(1)总s_id水果组与汇总
最后一行被添加,7表示总列的所有值之和。
与ROLLUP关键字也在SQLServer,详细说明:,%,立方体的关键,汇总关键和SQLServer分组功能
注意:使用汇总时,你不能使用ORDER BY子句来同时,排序的结果是,汇总和秩序是相互排斥的!
限制限制查询结果的数量。
在SQLServer,顶部使用关键字,关键字和限制使用MySQL
限制{位置偏移},行数
第一个位置偏移参数表示,如果没有指定位置偏移,MySQL开始显示从哪个行是可选参数。
它将从表中的第一条记录开始(第一记录的位置偏移量为0,第二天记录的位置偏移量为1…等等)。
返回返回项数的第二个参数行数
从水果中选择*
SELECT * FROM水果限4,3
上述结果返回第五条记录行开头的3条记录(自0开始)。
注:在mysql5.6,你可以使用极限4偏移3,这意味着你得到3的记录从第五行记录,并限制4,3返回相同的结果。
在sqlserver2012,这个语法是由MySQL语法的支持,但这需要排序的列,不像MySQL,不需要一个列排序。
使用{ }
去
创建表的水果
(
f_id char(10)不为空,
s_id INT NOT NULL,
f_name char(255)不为空,
f_price十进制(8, 2)不为空,
主键(f_id)
)
插入水果
(f_id,
s_id,
f_name,
f_price
)
select'a1,
101,
苹果,
五点二
联盟的所有
select'b1,
102,
黑莓,
五点二
联盟的所有
select'bs1,
105,
橙,
五点二
联盟的所有
select'bs2,
103,
甜瓜,
五点二
联盟的所有
select't1,
106,
香蕉,
五点二
联盟的所有
select'a6,
101,
樱桃,
六
联盟的所有
select'a8,
102,
椰子,
七
首先,s_id排序,然后返回到3的记录始于第五线
*选择
从{ } { } DBO的水果。
{ }的s_id ASC秩序
偏移4行
只取下3行;
虽然没有MySQL那么方便,但也是一种进步,为抵消性能取下可以参考Yunjian的歌:
SQL Server2012 T-SQL寻呼增强尝试
子查询
子查询是从mysql4.1介绍。
插入测试数据
创建表的TBL1(num1 int不为空);
创建表tbl2(num2 INT NOT NULL)
插入TBL1值(1)、(4)、(13)、(27);
插入tbl2值(6)、(14)、(11)、(20)
任何关键字后面是比较运算符,表示如果值的任何值的子查询返回的是真的,则返回true。
返回所有的tbl2 num2列表,然后比较num1在TBL1值与任何值大于num2,这是满足查询条件的结果。
选择在num1 >任何TBL1 num1(选择num2从tbl2)
所有的关键字后面是比较运算符,表示所有的子查询返回的值进行比较,真的,然后回到真实
选择从哪里num1 >所有num1 TBL1(选择num2从tbl2)
任何和所有的键也可以用于SQLServer
使用{ }
去
创建表的TBL1(num1 int不为空)
创建表tbl2(num2 INT NOT NULL)
插入TBL1值(1)、(4)、(13)、(27)
插入tbl2值(6)、(14)、(11)、(20)
选择在num1 >任何TBL1 num1(选择num2从tbl2)
选择从哪里num1 >所有num1 TBL1(选择num2从tbl2)
结果是一样的。
合并查询
使用联合关键字,当结果合并时,两个查询的列和数据类型的数量必须相同。
每个SELECT语句由并集或联合所有关键字分隔。
联合:在执行时删除重复记录,所有返回的行都是唯一的。
联合所有:不要自动排序结果而不删除重复行
选择s_id,f_name,f_price
从水果
在f_price<9
联盟
选择s_id,f_name,f_price
从水果
在s_id在(101103)
第一个查询是查询一个小于9 f_price记录,和第二查询处理s_id 101和103。
因为一些记录在f_price小于9的记录s_id是102, 105,和106,这些结果将不会被删除,并将第二查询合并。
所以最终的结果将有s_id记录的102, 105,和106。
正则表达式查询
正则表达式是不是SQLServer,但不仅在MySQL,而且功能丰富
使用正则表达式关键字指定MySQL中的正则表达式的字符匹配模式
1,查询特定字符或字符串开头的记录。
匹配以特定字符或字符串开头的文本的文本。
选择*从水果里f_name regexp的^ B
返回B的f_name场纪录
2,在某个字符或字符串的结尾查询记录。
以特定字符或字符串结尾的文本。
选择*从水果里f_name regexp'y $
返回一个记录,结束在f_name场Y
三.使用符号替换字符串中的任何字符。
字符。匹配任何字符
SELECT * FROM水果,f_name regexp'a.g
A和G的两个字母包含一个字符,而橙色符合要求。
4。使用*和+匹配多个字符
星号与前一个字符匹配的次数最多,包括0次,至少一次字符加上匹配前的字符。
选择*从水果里f_name regexp的^巴*
黑莓和香蕉符合要求,B开始,任何一个匹配多次,无论订单出现在哪里。
选择*从水果里f_name regexp的^ BA +
+至少匹配字母A,只有香蕉满足匹配条件。
5。匹配指定字符串
正则表达式可以匹配指定的字符串,只要在查询文本字符串被如匹配多个字符串分隔符分隔|之间的多个字符串
选择*从水果里f_name regexp'on | AP
你可以看到苹果、甜瓜和椰子的3个价值观包括字符串和AP,以满足匹配条件。
6。匹配指定字符中的任何一个
括号指定字符集,只有一个字符,即要查找的文本。
选择*从水果里{ }f_name regexp OT
括号还可以指定值集。
选择*从水果里s_id regexp的{ 456 }
在s_id字段的值的3个数字1是匹配的记录字段
{ 456 }也可以作为指定的集合间隔写入。
7。与指定字符以外的字符匹配。
字符集,而不是指定集合中的任何{ }字符。
选择*从水果里f_id regexp的{ ^ a-e1-2 }
返回一个记录,是不是在一个AE 1-2封信的开头,如A1,B1,不符合要求。
8。使用{、}、或n和m }来指定连续字符串的数目。
字符串是{,},至少表示N时间之前的字符;字符串n和m表示匹配前的字符串不小于n次,不超过m次。
选择*从水果里f_name regexp'b { 1 }
至少有1个字母B、黑莓和香蕉都符合要求。
选择*从水果里f_name regexp'ba { }的1,3
BA字符串至少出现一次,最多三次,香蕉串符合要求。
总结
本节介绍了MySQL的查询与SQL Server进行比较,尤其是定期查询MySQL的灵活性
这比SQLServer的一点
如果有不对的地方,欢迎派专噢(一_ u)O
附上一个O(色情作者_ U)这是O.