SQL 学习笔记

上一篇 / 下一篇  2007-09-21 11:07:05 / 个人分类:LAMP

Azz R1@-I}~0对于熟悉的不再记录了木铎校园 BBS 社区s)|lRe&I

.N%yOI9L"RD01,distinct()木铎校园 BBS 社区m3nH U%F4\3e

o;dLH F ]`'o0选择出不重复的记录,相当于shell的uniq木铎校园 BBS 社区9{0K']0Yz5Y\

木铎校园 BBS 社区sr-Dbi

例:select count(author)/distinct(author) from cdb_threads;木铎校园 BBS 社区p+a,@hq

1j3QJ8F7TOQ02,SQL_CALC_FOUND_ROWS 和 FOUND_ROWS()木铎校园 BBS 社区K^ `r7^` B

木铎校园 BBS 社区7Vd3Z(~"\x;W? k

从4.0开始,在一条带有limit的select命令里增加一个SQL_CALC_FOUND_ROWS 选项,就可以在下一条命令里用SQL函数 FOUND_ROWS()查出这条SELECT命令在不带有limit的情况下返回的记录数。

Q l bU\0木铎校园 BBS 社区S2WOFs[Vt

例:木铎校园 BBS 社区7voWkg+K

木铎校园 BBS 社区snm~f,l;w

mysql> select sql_calc_found_rows * from cdb_threads limit 2;

-` ]w-X&aed pc%Hr{0木铎校园 BBS 社区1w2S0yw0h8q

mysql> select found_rows();木铎校园 BBS 社区8_i _^*u:wz'l
+--------------+
x#g4],U n bC/B$d0| found_rows() |
:Y8Z8Vxp+V5w$w*og m)^0+--------------+木铎校园 BBS 社区6a"a"~ I!t
|       109581 |
#P5@8~8Z$q0+--------------+木铎校园 BBS 社区9B6@aKt
1 row in set (0.03 sec)木铎校园 BBS 社区@?EKZ

木铎校园 BBS 社区~ X,aq l'D

3,排序木铎校园 BBS 社区j\~ s#hhQ0|{A

L&g8jA7p$e&c l0order by 列名,加上desc或产生倒序排序的结果。木铎校园 BBS 社区&d~ g4eJ;d"U G.f

木铎校园 BBS 社区2w8@X(?;?8K

最终的排序效果还要取决于在定义数据表的时候为有关数据列设定的排序方式是什么木铎校园 BBS 社区vsNXq f&U&H3m o]

4umGQr$]0如果希望临时改用另外一种排序方式对查询结果进行排序,可以在select命令里用collate子命令进行设置(可以用show collation命令查看有多少种排序方式),这种临时改用其它方式进行排序的做法将导致mysql在排序的时候不能使用任何索引,所以对于大表,这是一种很没有效率的做法。

Ldjd6M'l0

(A'fYN!\&yq04,筛选记录(where having like isnull )木铎校园 BBS 社区iV1Y9p"l8Wr},q

uz1U%m-OC0like操作符进行的比较操作在大表上进行会很慢,因为要读取全部记录,并且不能使用索引来优化(like "sss%"的形式是可以使用索引优化的),这类查询旺旺可以改用利用全文索引的查询

k@`4KjA qpBX:~c0木铎校园 BBS 社区aRAu)m~\A8J

例:select * from authors where authIDIN(2,6,7)木铎校园 BBS 社区 ?!je*OM|j

3Q'Z.eOv;[_zY0查询条件也可以使用having来引导,如果where和having同时出现,mysql将优先执行where子句,而having子句只能用来对 select ……where……查询的结果(中间结果)做进一步筛选。having关键字的优点是查询条件还可以作为有关字段的数学计算结果(比如 group by 查询中的sum(columnXy)函数)

yL1?l?}+h;{ A9i0

N#n1L)}&S Yh'c0having 不像where那么优化!

qOL9vxna0

,V O1f?UQNt0例:木铎校园 BBS 社区8[#RK}+M-^0ie

木铎校园 BBS 社区7n~"d.`@b'F0D

If theHAVINGclause refers to a column that is ambiguous, a warning occurs. In the following statement,col2is ambiguous because it is used as both an alias and a column name:木铎校园 BBS 社区5\:o4b,A5m*A?

SELECT COUNT(col1) AS col2 FROM t GROUP BY col2 HAVING col2 = 2;

j[n Kq6Vp$O(u0Preference is given to standard SQL behavior, so if aHAVINGcolumn name is used both inGROUP BYand as an aliased column in the output column list, preference is given to the column in theGROUP BYcolumn.

5i?n/qvZ0
  • 木铎校园 BBS 社区U+Tw;^L*A)|.?/z

    Do not useHAVINGfor items that should be in theWHEREclause. For example, do not write the following:

    m&pa t/M@5G0
    SELECTcol_nameFROMtbl_nameHAVINGcol_name> 0;
    木铎校园 BBS 社区 ]Bm:jz"c{

    Write this instead:木铎校园 BBS 社区Yv/o[1Y-t9[,v

    SELECTcol_nameFROMtbl_nameWHEREcol_name> 0;
  • 木铎校园 BBS 社区 q*@*j%h s

    TheHAVINGclause can refer to aggregate functions, which theWHEREclause cannot:木铎校园 BBS 社区Da2v#T {jx

    SELECT user, MAX(salary) FROM users
      GROUP BY user HAVING MAX(salary) > 10;
    木铎校园 BBS 社区3B(jl#o0rS

    (This did not work in some older versions of MySQL.)木铎校园 BBS 社区|3cOf(KbD

  • 木铎校园 BBS 社区$lg`6Y&K^&a

    5,mysql不支持 cloname=null的查询方式,需要使用 ISNULL(colname)函数

    #q&^BM7D4UI4y0

    G/_E(uJH1GK`06,多表查询木铎校园 BBS 社区"OV:Eg?Eo~


    TAG:

     

    评分:0

    我来说两句

    显示全部

    :loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

    关于作者