1. 程式人生 > >SQL簡介&資料表分析&資料查詢

SQL簡介&資料表分析&資料查詢

        SQL指的是結構化的查詢語句

        SQL有幾個子類:DML:資料的更新與查詢操作(SELECT,FROM,INSERT,GROUPBY,HAVING,WHERE,UPDATE,DELECT),DDL:資料庫物件的定義語句,DCL

         scott使用者表

         首先如果想知道某一個使用者(模式)所有的資料表,可使用如下語法完成:

                CONNECT scott/tiger;

                SET LINESIZE 300;

                SET PAGESIZE 30;

                SELECT*FROM tab;

         此時想要看錶結構,可使用:DESC dept;  

         簡單查詢的SQL語法結構如下所示:([]表示可選)

         簡單查詢中的最大特徵在於:控制資料列,但是它無法進行資料行的控制

        (b)SELECT [DISTINCT]*| 列[別名],列[別名],.......

        (a)FROM 表名稱 [別名];

        如果在SELECT子句中使用了"*"表示的是查詢一張表中的所有資料列,FROM子句是確定資料來源,來源只要是表結構(行與列的集合),而SELECT子句控制的是需要的資料列(資料的投影:控制所需要顯示的資料列)。

        除了進行基本的查詢列之外,在簡單查詢之中也支援四則運算,並且可以直接使用列的內容進行四則運算。為了達到美觀,可以進行別名設定。實際上在以後定義資料表名稱或者列名稱的時候中文也支援,但是如果你想你的開發正常點,別用中文。

        實際上在進行簡單查詢的過程之中,還支援資料的連線操作,使用“||”進行連線。可以將連線變得好看些,可以中間使用一些文字描述,對於固定的輸出類容的處理暫時只考慮兩種型別的資料:

        普通數字:那麼直接編寫(SELECT ename ||1 FROM emp;)

        字串:使用單引號宣告(SELECT empno||‘hello’ FROM emp;)

        在簡單查詢的操作之中還存在一個DISTINCT關鍵字,此關鍵字主要目的是消除重複內容。但是需要提醒的是,如果是消除重複內容,指的是查詢出來的資料所有列的內容都重複。

        SQL限定查詢(SQL語句的執行順序,限定符號的使用)

        如果想要對所選擇的資料進行控制,那麼可以利用WHERE子句完成,此時的SQL語法結構變為如下形式:

        【c.選出所需要的資料列】SELECT [DISTINCT]*| 列[別名],列[別名],.......

        【a.確定資料來源】FROM 表名稱 [別名];

        【b.篩選資料行】[WHERE 限定條件(s)];

        SELECT子句是整個語法最後才會執行到的子句。但是如果要進行資料篩選,必須要使用若干個條件判斷符:

         關係執行:>、=、<、>=、<=、!=(<>);(=可以在數字上使用,也可在字串上使用)

         範圍運算:BETWEEN...AND;

         空判斷:IS NULL、IS NOT NULL;

         IN判斷:IN、NOT IN、exists()(複雜查詢);

         模糊查詢:LIKE、NOT LIKE。

         以上的限定符都只能判斷一次,如果現在有若干個限定符,那麼就需要進行若干個限定符的連線,可以使用邏輯運算:AND(與)、OR(或)、NOT(非);

   以上所給出的判斷符是SQL中的標準支援,其他的不同資料庫有可能有自己的擴充的內容

         邏輯運算:()可以保證連線多個條件,如果要連線主要使用AND,OR完成;(連線得越多,執行效率越低)

         在Oracle中所有運算子都不受資料型別的控制,在之前使用的是數字進行了判斷,那麼除了數字外,也可以用字串或者是日期進行判斷。(字串的意義不大)

         日期判斷:

                 SELECT*

                 FROM emp

                 WHERE hiredate BETWEEN ‘01-1月-81’ AND ‘31-12月-1981’;

         空判斷:

                null從資料庫定義上來講屬於一個未知的資料,任何情況下如果任何一個數字與null進行計算,那麼結果還是null

                SELECT null+1 FROM emp;

                在某些資料列上是允許存在有null值的,但是對於null不能夠使用關係運算判斷。關係可以判斷的是資料,null不是空字串也不是數字0,所以在SQL之中只能通過IS           NULL來判斷為空,以及IS NOT NULL(NOT  欄位 IS NULL)判斷不為空。

        IN操作符(謂詞IN)

        IN指的是根據一個指定的範圍進行資料查詢

        WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999;VS       WHRER empno IN(7369,7566,7788,9999);後者效能更好,但是需要由一個特別提出的注意點。在使用IN操作的時候實際上也可以使用NOT IN,那麼這個表示的是不在範圍之中,而問題也就從NOT IN開始。在使用NOT IN的時候如果查詢的資料範圍之中包含有null值,那麼不會有任何結果返回,IN操作無此限制。

模糊查詢:LIKE(核心)

        LIKE可以實現資料的模糊查詢操作,如果要想使用LIKE則必須使用如下兩個匹配符號:

                “_”:匹配任意的一位符號;

                “%”:匹配任意的符號(包含匹配0位、1位、多位)

        如:查詢所v有僱員姓名中以字母A開頭的僱員資訊

                第一個字母A是固定的,而後的內容隨意:WHERE ename LIKE ‘A%’;

                查詢所有僱員姓名中第二個字母是M的所有僱員:(第一位可以任意,但必須佔一位使用“_”;後面的位隨意,使用“%”)WHERE ename LIKE ‘_M%’;

                查詢僱員姓名中任意位置上存在有字母A的僱員資訊:(開頭、結尾、中間都可以,使用“%A%”;) 

         關於LIKE的兩點說明:

    如果在使用LIKE進行限定查詢的時候,沒有設定任何的關鍵字,那麼表示查詢全部;

    LIKE可以在任意的資料型別上使用(原生支援),雖然所有的資料型別都支援LIKE,但是往往會在字串上使用,且所有的搜尋引擎不會用LIKE。

        查詢排序:ORBER BY子句

        如果說早預設情況下資料查詢的時候,它會按照自然排序的進行資料的排列,所有的自然順序是不可控的,所有往往都會由使用者自己來進行排序操作,那麼這個時候就可以使用ORDER BY子句,而此時的SQL語句結構就變為了如下形式:

        【c.選出所需要的資料列】SELECT [DISTINCT]*| 列[別名],列[別名],.......

        【a.確定資料來源】FROM 表名稱 [別名];

        【b.篩選資料行】[WHERE 限定條件(s)];

        【d.資料排序】[ORDER BY 排序欄位[ASC|DESC],排序欄位[ASC|DESC],...]

既然ORDER BY是在SELECT子句之後執行,那麼就意味著ORDER BY可以使用SELECT子句定義的別名

         排序可以在任意資料型別上執行,包括字串,日期都可以。

         除了可以進行單一欄位的排序,也可以進行欄位的混合排序操作。指的是可以進行若干個欄位的排序。

         eg:按照工資由高到低排序,如果工資相同,則按照僱傭日期由早到晚排序

                 ORDER BY sal DESC ,hiredate;

        所有的排序操作都是在WHERE篩選之後進行的。

       總結:1.SELECT子句確定資料列;

                    2.WHERE子句控制資料行;

       3.ORDER BY子句永遠最後執行

       索引:

1) 索引應該在SQL語句的"where"或"and"部分涉及的表列(也稱謂詞)被建立。假如:personnel表的"firstname"表列作為查詢結果顯示,而不是作為謂詞部分,則不論其值是什麼,該表列不會被索引。

  2)使用者應該索引具有一定範圍的表列,索引時有一個大致的原則:如果表中列的值佔該表中行的2 0 %以內,這個表列就可以作為候選索引表列。假設: 一個表有36 000行且表中一個表列的值平均分佈(大約每12000行),那麼該表列不適合於一個索引。然而,如果同一個表中的其他表列中列值的行在1 0 0 0~15 0 0之間(佔3 %~4 % ),則該表列可用作索引。

  3)如果在S Q L語句謂詞中多個表列被一起連續引用,則應該考慮將這些表列一起放在一個索引內, O r a c l e將維護單個表列的索引(建立在單一表列上)或複合索引(建立在多個表列上)。複合索引稱並置索引。

相關推薦

SQL簡介&資料分析&資料查詢

        SQL指的是結構化的查詢語句         SQL有幾個子類:DML:資料的更新與查詢操作(SELECT,FROM,INSERT,GROUPBY,HAVING,WHERE,UPDATE,DELECT),DDL:資料庫物件的定義語句,DCL        

MySQL(04)——SQL語句之資料內容的查詢

這個大概是使用最多的命令了。 因為平時插入資料都是程式寫好來插入的,自己不會手動插入資料; 建庫建表也不是自己操心的事; 修改資料的例子也很少; 刪除資料?這個事幾乎不幹。 剩下的也就是查詢資料了。 create table student( id int p

SQL SERVER匯出資料sql指令碼形式

CREATE proc spGenInsertSQL (@tablename varchar(256)) as begin declare @sql varchar(8000) declare @sqlValues varchar(8000) set @sql =' (' set @sqlVal

tp5.1資料的聯合查詢

資料表的聯合查詢本質上是找表的交集 先找交集再交叉並集 1 分別找到兩個表  2分別在兩張表裡找打符合join()裡的條件的表,在找到符合where條件裡的表  3兩張表裡的條件交叉並集 Db::name()->alias()->join()->wher

SQL 將一個資料插入到另一個

語法: 1.原來沒有的建立的表 select * into 表A form 表B where條件 2.原來存在的表 insert into 表A select * from 表B where 條件 示例: USE Student_Course2 IF EXISTS(SELE

SQL Server 複製資料的兩種方法

1、新表不存在(即複製資料的同時建立與舊錶相同結構的新表): select [col1,col2,col3...] into new_table from old_table where 1=1 2、新表已存在,從舊錶從插入選擇的資料(注意:表的[主鍵]不要複製,

OA專案中關於資料遞迴查詢

例如知道某員工頂級部門id(企業id)需要查詢所有員工正常Oracle遞迴SELECT DISTINCT U.*,UD.ORDER_NUM FROM TBL_BASE_USER U ,TBL_BASE_USER_DEPT UD,(select*from tbl_base_de

SQL語句判斷 資料庫 資料是否存在

 Sql Server中判斷表或者資料庫是否存在  if exists(select 1 from master..dbo.sysdatabases where name='example')print 'DataBase existed'elseprint 'Databa

sql同一張統計資料生成多個統計列

create view parkingcloudjournalstat as select enterdate, sum(case when parkingId = 'GhW4Hmsu' then 1 else 0 end) as "GhW4Hmsu", sum

ThinkPHP 3.2.3 資料大小寫問題(查詢時候強制轉換小寫)解決辦法

ThinkPHP官方解決方案: //在配置中加入 'DB_PARAMS' => array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL), // 資料庫連線

oracle 更資料資料列的SQL命令

建立資料表:CREATE TABLE test(USERNAME varchar(100), USERAGE int); 刪除資料表:DROP TABLE test; 更改資料表名: ALTER TABLE test_old RENAME TO test; 新增資料欄位:

mysql結構相同的資料資料合併到一個

1、拼接生成批量插入語句 SELECT concat('insert into ordertarget(欄位名) select 欄位名 from ',table_name,';') FROM information_schema.TABLES WHERE table_name LIKE 'eco

如何對比mysql資料資料與excel資料是否重複?

一、利用excel比對 1、將mysql資料表匯出為excel 2、將表格資料與excel資料進行對比 方法一:函式COUNTIF     IF(COUNTIF(資料庫資料所在的區域,目標值所在區域)=0,”不重複”,”“)      方法二:函式Ma

Mysql資料庫的基本操作--資料庫,資料資料的基本操作

- -資料庫的操作 連結資料庫:mysql -u使用者名稱 -p 密碼 退出資料庫:exit, quit, ctrl+d 檢視所有的資料庫:show databases; (注意命令後面要加分號 ;) 顯示時間:select now(); 顯示資料庫版

遊戲資料資料驅動

前言 之前博文介紹過了,一種程式碼匯出的工作方式《如何讓你的程式載入Excel配置檔案》。但這種方式存在一些弊端,比如如果想在執行時替換資料(Reload),就會比較困難(解釋執行語言例外)。但在目前的遊戲架構中,不論是客戶端還是伺服器,都強烈的具有這種需求。 主要思想

MySQL之終端(Terminal)管理資料庫、資料資料的基本操作

MySQL有很多的視覺化管理工具,比如“mysql-workbench”和“sequel-pro-”。 現在我寫MySQL的終端命令操作的文章,是想強化一下自己對於MySQL的理解,總會比使用圖形化的理解透徹,因為我本來就比較喜歡寫程式碼。同時寫出來這些文章,是想要給大家當個參考,希望也能對大家有所幫助,有所

資料資料的複製 (同一個庫 最簡單版本)

轉載地址  https://zhidao.baidu.com/question/309246555.html SQL Server中,如果目標表存在: 1 insert into 目標表 select * from 原表; SQL Server中,,如

pandas建立資料資料讀寫

import pandas as pdimport numpy as npdf = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],                  columns=['

postgre刪除資料重複資料

select distinct * into t_sup_supcomm_copy from t_sup_supcomm; drop table t_sup_supcomm; select * into t_sup_s

Informix資料結構分析資料整理之欄位型別說明和查詢SQL語句

查詢所有Informix資料表字段型別SQL語句: select a.tabname,b.colname,b.coltype,case   b.coltype when '0' then 'CHAR' when '1' then 'SMALLINT' when '2' the