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学习笔记(七)查(补充)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQueryHTMLCSS3实现垂直手风
- 下一篇: 数据访问——封装类