日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql学习笔记(七)查(补充)

發布時間:2024/9/5 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql学习笔记(七)查(补充) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Mysql學習筆記(七)查(補充) 原文:Mysql學習筆記(七)查(補充)

PS:五一還是要學習...雖然有點苦逼..但是路是自己選的,那么自己就要堅持的走下去...

學習內容:

1.數據庫查找的補充...

查找涉及的東西比較多,在上一個章節沒有完全介紹...我們還是以pet表格為例,在這里進行補充....

模式匹配:

? 所謂模式匹配,無非就是按照某種模式進行查找...我們給出的一個模范,然后按照這個模范進行匹配完成的查找就屬于模式匹配查找...模式匹配的查找中,我們不能夠使用=或!=來操作,應該使用like或not like 進行操作...

?

//查找名字以b開頭的寵物...
select * from pet where name like 'b%';
//查找名字以fy結尾的寵物..
select * from pet where name like '%fy';
查找名字里包含w的寵物...
select * from pet where name like '%w%';

?

這類屬于的是sql標準的模式匹配..還有另一種類型的匹配屬于擴展正則表達式的模式匹配...下面進行簡單介紹..

擴展正則表達式的一些字符..

  • '.'匹配任何單個字符..
  • [...]匹配在方括號包括的字符,這個可以是指定值,也可以是一個范圍值。。[abc]匹配字符只能有'a','b','c'為命名范圍的字符..[a-z]匹配a-z之間為命名范圍的字符..
  • '*'匹配0個或者多個*之前的字符..

注意:

  • 如果regexp模式與被測值的任何地方匹配,那么該模式就匹配。。
  • 為了定位一個模式以便它必須匹配測試值的開頭或者結尾...該模式開頭使用'^',或者結尾使用'$'。。

?

//查找所有以b開頭的寵物名字...不區分大小寫select * from pet where name regexp '^b';//區分大小寫...select * from pet where name regexp BINARY '^b';//查找以fy結尾的寵物名字...select * from pet where name regexp 'fy$';

?

計數行:就是使用count(*)函數..

select count(*) from pet;//顯示數據庫數據的行數..

當我們想要查找一些特定的數據信息的時候..可以使用count(*)函數,配合著group by來進行查詢..比如說,我們想要查詢寵物貓和狗的數據信息的時候..我們沒必要查詢整個表,只需要使用count函數配合group by就可以查詢的到..

?

select species,sex count(*) from pet where species="dog" or species="cat"group by species,sex;

常用的一些查詢的例子:

比如說,我們建立了一個商店的數據庫。。。商店里有一些物品,并且每件物品都有一個價值...

?

mysql>create table shop ->( -> article int(4) unsigned zerofill default '0000' not null, -> dealer char(20) default '' not null, -> price double(16,2) default '0.00' not null, -> primary key(article,dealer) ->);mysql>insert into shop values(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C','1.69'),(3,'D',1.25),(4,'D',19.95);1.查詢列的最大值... select max(article) as article from shop;2.查詢某個列的最大值的一行數據...兩種方法.. select article,dealer,price from shop where price=(select max(article) from shop); select article,dealer,price from shop order by price desc limit;3.列的最大值,與第一個不一樣的地方在于,第一個是顯示所有物品里的最大值,這種屬于顯示每一種物品的一個最大值.. select article max(price) as price from shop order by article;4.擁有某個字段的組間最大值的行.. select article,dealer,price from shop s1 where price=(select max(s2.price) from shop s2 where s1.article=s2.article);

?

第四條使用臨時表的形式也可以做到...

?

CREATE TEMPORARY TABLE tmp (article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,price  DOUBLE(16,2)       DEFAULT '0.00' NOT NULL );LOCK TABLES article read;INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;SELECT article, dealer, price FROM shop, tmpWHERE shop.article=tmp.articel AND shop.price=tmp.price;UNLOCK TABLES;DROP TABLE tmp;

?

這個是看別人寫的,自己并沒有完全弄懂..有興趣的可以研究研究...還有一種方式:

?

SELECT article,SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer, 0.00+LEFT(MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price FROM shop GROUP BY article;

使用用戶變量:

如果我們想要找出價格最高和最低的物品..并且還不想保存到客戶端的臨時變量中時..我們可以使用用戶變量...

mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;

查詢還有使用外鍵查詢。。使用auto_increment查詢...自己只是了解,就不在這里班門弄斧了...

?多表查詢:

簡單的介紹一下多表查詢。。。。多表查詢涉及的內容很多..在這里只是簡單的介紹一下使用select子語句進行查詢..

?

CREATE TABLE IF NOT EXISTS contact( contact_id int(11) NOT NULL AUTO_INCREMENT, user_name varchar(255), nom varchar(255), prenom varchar(255), mail varchar(64), passcode char(64), PRIMARY KEY(contact_id) ); CREATE TABLE IF NOT EXISTS droit( droit_id int( 11 ) NOT NULL AUTO_INCREMENT , droit varchar(255), PRIMARY KEY(droit_id) ); CREATE TABLE IF NOT EXISTS contactdroit( contactdroit_id int(11) NOT NULL AUTO_INCREMENT, contact_id int( 11 ), droit_id int( 11 ), PRIMARY KEY( contactdroit_id ) ); Insert into contact(contact_id, user_name) values(1,'user1'); Insert into contact(contact_id, user_name) values(2,'user2'); Insert into contact(contact_id, user_name) values(3,'user3'); Insert into droit(droit_id, droit) values(1,'admin'); Insert into droit(droit_id, droit) values(2,'superuser'); Insert into contactdroit(contact_id, droit_id) values(1, 1); Insert into contactdroit(contact_id, droit_id) values(2, 1); Insert into contactdroit(contact_id, droit_id) values(3, 2); SELECT c.contact_id, d.droit_id, d.droit FROM contact c, contactdroit cd, droit d where c.contact_id = cd.contact_id and cd.droit_id = d.droit_id;

?

想了解更多的多表查詢:http://blog.sina.com.cn/s/blog_6ad62438010168lg.html

?

posted on 2015-05-09 11:53 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/4489642.html

總結

以上是生活随笔為你收集整理的Mysql学习笔记(七)查(补充)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。