比较异同,加深记忆。

这是一个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.