『壹』 sql 怎麼取不重復的數據的所有數據
SQL數據重復分幾種情況,一種是原數據重復,第二種是粒度重復,第三種是分布重復。
原數據重復的情況,你直接可以distinct掉,例如,學生表當中有兩個重復的學號,你想取出不重復的,直接可以寫:select
distinct
學號
from
學生表
第二種是查詢粒度重復,比如你有一張表是存儲區域的,分別為省、市、縣三列。而你需要的是只查找不同的省市,則也可以使用distinct:select
distinct
省,市
from
區域
第三種則是分布重復,比如在join
的時候,左右兩個表格存在一對多的關系,造成的重復,或者在聚合之後出現了維度重復,則這種相對來說比較麻煩,你需要在子查詢中統計或查找出唯一值,然後再去關聯,或者是按照一定的數據需求的取數規則,在查詢結果後再進行聚合,取到唯一值。
不過不管怎麼樣,都是要看實際需求是什麼樣子的。大多可以用子查詢和關聯聯合解決。
『貳』 SQL實戰新手入門:獲取數據-SELECT語句(3)
獲取數據 SELECT語句( )
其次 更為重要的是 可以在WHERE子句中使用列名來引用列 WHERE子句的功能是作為一個篩選器 允許用戶選擇與特定條件相匹配的記錄 例如Alex Kriegel編寫的所有圖書或者那些由Wiley出版社出版的圖書 WHERE子句的語法非常直觀 看起來就像是英語語句一樣
SELECT * FROM myLibrary WHERE publisher = Wiley ;
該查詢的結果僅僅列出了PUBLISHER列中存儲的值等於Wiley的那些記錄 注意 WHERE子句中的Wiley值應該用單引號括起來 以指示資料庫要進行比較的是字元數據類型
資料庫中可能包含了數百萬條記錄 WHERE子句可以縮小搜索的范圍 篩選出一條特定的記錄或者一個與指定篩選標准相匹配的記錄的集合 這正是SQL語言作為一種基於集合的聲明性語言的強大之處 使用一個類似於英語的簡單語句就可以搜索記錄並返回一個滿足匹配條件的記錄的子集 而無須關心數據是如何存儲的 甚至無須知道數據存儲在什麼地方 當在Microsoft Access Oracle PostgreSQL MySQL SQL Server或IBM DB 中運行上面的SELECT語句時 都將返回完全相同的結果
在WHERE子句中 另外一個重要的組成部分就是使用操作符 前面的查詢使用了一個等於操作符 用於篩選出那些出版社名稱為Wiley的記錄 採用類似的辦法 使用不等於操作符很容易查詢出那些不是Wiley出版社出版的圖書
SELECT * FROM myLibrary WHERE publisher <> Wiley ;
使用AND和OR邏輯操作符可以將多個操作符連接在一起 定義一個更為嚴格的篩選標准 例如 要查找Wiley出版社出版的由Alex Kriegel編寫的圖書 可以使用下面的查詢
SELECT * FROM myLibrary
WHERE publisher = Wiley AND author= Alex Kriegel ;
該查詢僅僅返回一條同時滿足這兩個條件的記錄 如果使用OR邏輯操作符來連接這兩個條件 則可以返回滿足其中任意一個條件的所有記錄 而不一定要求兩個條件都同時滿足 但在布爾邏輯中使用邏輯操作符來定義搜索條件時 應當倍加小心 除非完全理解了邏輯操作符的規則 否則查詢結果可能會大大出乎意料
第 章將進一步介紹操作符 以及其在不同資料庫廠商之間的語法差異和優先順序規則
試一試使用SELECT語句
在下面的練習中 將採用Microsoft SQL Server 資料庫環境練習一下SELECT語句的使用 請重復本章第一個 試一試 練習中步驟( )到步驟( )的操作 以便輸入並執行SQL命令
( ) 輸入下面的SQL語句 將數據插入到MYLIBRARY表中
INSERT INTO myLibrary (title author book_language publisher pages
author publish_date i *** n)VALUES ( SQL Bible Alex Kriegel English
Wiley Boris M Trukhnov April )
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( Microsoft SQL Server Weekend Crash Course Alex Kriegel
English Wiley October )
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( Mindswap Robert Sheckley English Orb Books May
)
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( Jonathan Livingston Seagull Richard Bach English MacMillan
)
INSERT INTO myLibrary(title author book_language publisher pages publish_date
i *** n) VALUES ( A Short History of Nearly Everything Bill Bryson
English Broadway October )
( ) 單擊位於上方工具欄中的Execute按鈕 如之前的圖 所示
( ) 在下方窗格的Messages選項卡中 可以看到 條確認信息 ( row(s) affected)
( ) 下面的查詢語句將從MYLIBRARY表中選取所有的行和列(由於版面空間的限制 這里省略了這些例子中實際查詢結果的顯示)
SELECT * FROM myLibrary;
( row(s) affected)
( ) 為了縮小搜索的范圍 添加一個WHERE子句
SELECT * FROM myLibrary
WHERE publisher = Wiley ;
( row(s) affected)
返回目錄 SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
lishixin/Article/program/SQL/201311/16482
『叄』 哪個sql語句用於從資料庫中提取數據
用sql語句,從資料庫提取結果屬於查詢,使用select語句。select語句屬於DQL(Data Query Language)。最基本的就是:select [列名1,列名2……] from [表名] where [條件]。
『肆』 sql取當前時間前24小時之內的數據怎麼取
sql取當前時間前24小時之內的數據的方法如下:
1、如果是ACCESS的話:
select * from 表名 where DateDiff('h',時間欄位名,now())<=24
2、如果是sql server的話:
select * from 表名 where DateDiff(hh,時間欄位名,getDate())<=24
(4)sql取數據擴展閱讀:
sql取每天固定時間的數據的方法:
select * from 表 where 日期欄位>='開始日期' and 日期欄位<='截止日期'
and convert(char(8),日期欄位,108)>='開始時間' and convert(char(8),日期欄位,108)<='截止時間'
例如:
select * from tb1 where dDate>='2010-11-05' and dDate<='2010-11-15'
and convert(char(8),dDate,108)>='22:30:00' and convert(char(8),dDate,108)<='23:00:00'
『伍』 SQL資料庫如何提取數據
程序有問題呀,你的查詢返回了login表中的所有數據,在判斷用戶名是否存在表中時,只讀取了第一條,只要第一條記錄的用戶名不是你輸入的那個用戶名,a==username就不會成立。要用一個循環依次讀取所有記錄來判斷才行。
建議在查詢時以用戶名為條件查詢,這樣只在查詢後檢查dr是否返回數據就可以判斷用戶名存不存在了。
string
username
=
textbox1.text.tostring();
string
password
=
textbox2.text.tostring();
string
qq
=
"select
*
from
login
where
username='"
+
username
+
"'";
sqlconnection
conn
=
new
sqlconnection(connstring);
conn.open();
sqlcommand
cmd
=
new
sqlcommand(qq,
conn);
sqldatareader
dr
=
cmd.executereader();
if
(dr.hasrows)
//判斷dr是否返回了一行或多行數據
{
messagebox.show("用戶名已存在,請重新輸入!");
}
else
{
。。。。。。
}
『陸』 SQL 如何取出資料庫中一列的所有值.....
1、首先需要輸入名稱和密碼登陸伺服器。
『柒』 SQL資料庫如何提取指定的金額數字
SUBSTRING ( expression , start , length )
select substring('123456.78',1,1) 其中 第一個"1"是第一位開始,第二個"1"是指取一位數。
所以十萬:select substring('123456.78',1,1) =1
取千:select substring('123456.78',3,1) =3
取角:select substring('123456.78',8,1) =7
----僅供參考
『捌』 SQL實戰新手入門:獲取數據-SELECT語句(1)
獲取數據 SELECT語句( )
現在MYLIBRARY表中已經有了數據 可以對該表執行查詢 以精確地查找所具有的圖書 SELECT語句用於從表中獲取數據 要使用SELECT語句獲取數據 只需要告訴它表名和列名
SELECT all_my_books FROM myLibrary;
盡管該查詢可以產生一個圖書信息的列表 但它還不是特別有用 該圖書信息是一大堆的數據 將其存儲在一個關系型資料庫中的唯一好處就是可以輕而易舉地重新獲取或列印這些信息 如果要搜索數據呢?要查找是否有某一本特定的圖書 必須獲取所有的記錄 然後人工地逐一遍歷每一條記錄!這並不是我們期望從一個復雜的RDBMS軟體獲得的結果
需要採用某種辦法來標識存儲在表中的記錄的特殊關鍵詞 例如圖書名稱或ISBN號 對於該問題 一個標準的程序設計方式的答案就是對記錄進行解析 將記錄切分為多個片段 並在一個循環中遍歷查找特定的目標詞彙 對於表中的每一條記錄重復執行這一過程 如果沒有特定於廠商的過程化擴展 SQL無法執行任何類似的操作 這種方式違背了SQL語言是一種聲明性語言的本質 並要求深刻地理解數據結構 下面讓我們再看一看輸入到MYLIBRARY表中的第一條記錄
SQL Bible by Alex Kriegel Boris M Trukhnov Paperback: pages
Publisher: Wiley; edition (April ) Language: English
ISBN :
如何才能將記錄切分為不同的信息片段呢?每一個片段之間的標記是什麼呢?如何區分圖書的名稱和作者呢?如果使用空格符作為分隔符 那麼SQL和Bible將被切分為不同的片段 但在邏輯上SQL和Bible屬於同一個信息片段 如何才能知道by是一個介詞 而不是作者姓名中的一部分?解決的辦法來自SQL結構化的本性 畢竟SQL是一種結構化的查詢語言 要解決這一問題 需要更多的列來存儲不同片段的信息 將一個笨重的字元串拆分為多個語義上有著密切聯系的數據片段就可以獨立地標識每一個數據片段 因為每一個片段都成為一個單獨的列 回到CREATE TABLE語句(首先刪除現有的表)
DROP TABLE myLibrary;
根據上面的討論創建一個新表
CREATE TABLE myLibrary
(
title VARCHAR( )
author VARCHAR( )
author VARCHAR( )
publisher VARCHAR( )
pages INTEGER
publish_date VARCHAR( )
i *** n VARCHAR( )
book_language VARCHAR( )
)
在新表的結構中 將原來的單個列拆分為 個列 另外還可以添加第 個列 將作者的名和姓拆分到兩個單獨的列中(這就是將在第 章中討論的數據建模過程) 就目前而言 除了將PAGES列的數據類型設置為INTEGER類型以表示圖書包含多少頁之外 對於其他所有的列都使用了相同的數據類型 並縮短了每一個列中所能包含的字元數量 本章後面將進一步解釋將PAGES列設置為INTEGER類型的原因 讀者或許還會考慮到修改PUBLISH_DATE列的數據類型 通常情況下 日期數據的行為與字元數據不同 DBMS提供了專門用於日期和時間的數據類型
現在 無須將所有的數據都保存在同一個桶中 對於各個列的數據類型可以有更多的選擇 可以將不同的列定義為不同的數據類型 當插入或更新各個列中的數據(本章後面將對此進行介紹)時 建議不要將數據類型搞混
本章後面還將重新審視數據類型 第 章也將詳細地介紹數據類型
讀者可能已經注意到 在新的MYLIBRARY表中有兩個作者列 這是為了適應一本圖書有兩個作者的情形 這也提出了另外一個問題 當一本圖書只有一個作者或者一本圖書有 個作者時 該如何處理呢?該問題將在第 章和第 章的數據建模小節中進行深入的探討 這里 讀者只需要注意對於未使用的列將自動使用默認值進行填充 如果讀者發現經常需要在表中添加新的列 那麼最好花時間閱讀一下關於資料庫規范化方面的內容(請參見第 章)
接下來將向新表中插入數據 這一步驟與之前介紹的插入操作完全相同 唯一的差別在於VALUES列表變得更長 因為原來只包含一個列 而現在包含了 個列 在VALUES列表中 除了PAGES列的值之外 所提供的所有其他數據都必須用單引號括起來 引號表明了這些數據是字元數據 沒有引號則表示數值數據
INSERT INTO myLibrary VALUES (
SQL Bible
Alex Kriegel
Boris M Trukhnov
Wiley
April
English )
返回目錄 SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
lishixin/Article/program/SQL/201311/16484