Sql文

16757 ワード

データベースの概要:
データベース(DataBase,DB):コンピュータの記憶装置に長期保存され、一定の規則に従って組織され、各種のユーザーやアプリケーションに共有されるデータセットを指す。(ファイルシステム)
データベース管理システム(DataBase Management System、DBMS):データベースの安全性と完全性を保証するために、データベースを構築、使用し、維持するための大規模なソフトウェアを指す。ユーザはデータベース管理システムを通じてデータベース内のデータにアクセスします。
データベースソフトウェアはデータベース管理システムであるべきです。データベースはデータベース管理システムによって作成され、操作されます。
データベース:データのセットを保存、維持、管理します。
MySqlとSQLiteの違い
SQLiteは単一マシンデータベースです。機能は簡単で、小型化、最大ディスク効率を追求するMySqlは完璧なサーバデータベースです。機能は全面的で、総合化して、最大の同時性のMySql、Syboase、Oracleなどを追求して、これらはすべてサーバのデータ量の大きい機能で試用するので、多くインストールが必要で、例えばウェブサイトのアクセス量は比較的に大きいです。SQLiteは小型データベースで、簡単に移植できるので、インストールする必要がないです。いくつかのファイルが必要です。一般的な携帯電話、端末などが多く使われています。
もし単一のマシンだけで使うなら、データ量はそんなに多くなくて、プログラム上のデータの処理もあまり複雑ではないなら、SQLiteを使うのが適当です。
MySqlを使う
  • 登録Mysql:mysql -u -p回車、パスワード入力を提示する時にパスワード
  • を入力します。
  • アンインストール1.mysqlサービスを停止します。net stop mysqlスタートmysqlサービスnet start mysql 2.mysqlをアンインストールします。3.mysqlインストールディレクトリの下のmy.ini datadir=「C:/Prograamdata/MySQL Server 5.5/Data/」
  • パスワードを変更してcmdを実行しました。cmdを開けました。mysql -u -p はmysqlユーザパスワードを変更しました。
  • mysqlサービス運行停止入力services.mscはmysqlサービス、またはcmd-->net stop mysql
  • を停止します。
  • cmdでmysqldを入力します。skyp-grant-tables起動サーバカーソルが動かない(このウィンドウを閉じないでください)
  • 新しくcmdを開けてmysql-uユーザ名-pを入力します。パスワードが必要ではありません。use mysql;
  • 二つのcmdウィンドウを閉じ、タスクマネージャでmysqldプロセスを終了する
  • サービス管理ページでmysqlサービスを再開し、パスワード修正が完了しました。
  • は、SQLyogオペレーティングデータベースを使用することもできます。SQLyogは、簡単に使用され、簡単で簡潔なグラフィックス管理MYSQLデータベースのツールです。どこでも効率的にデータベース
  • を管理することができます。
    MySQLにデータを導入するとエラーが発生しました。update user set password=password('abc') WHERE User='root';原因:デフォルトの文字セットの問題は以下のエラーの作成文です。
    CREATE TABLE `City` (
      `CityID` int(11) NOT NULL,
      `ProvinceID` int(11) DEFAULT NULL,
      `Name` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
      PRIMARY KEY (`CityID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    以前使っていたgbk_chinese.ci,解決方法:デフォルトの文字セットを修正し、フィールドの文字セットをgbkに変更すればError : Incorrect string value: '\xE5\x8C\x97\xE4\xBA\xAC' for column 'Name' at row 1もテーブルを作成するときにデフォルトの文字セットを設定できます。
    CREATE TABLE `City ` (
      `CityID` int(11) NOT NULL,
      `ProvinceID` int(11) DEFAULT NULL,
      `Name` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
      PRIMARY KEY (`CityID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk ROW_FORMAT=COMPACT
    
    
    Sql文の分類
  • DDL(Data Definition Language):データ定義言語は、データベースオブジェクト:ライブラリ、テーブル、列などを定義するために使用されます。CREATE、ALTER、DROP
  • DMLL(Data Manipulation Language):データ操作言語は、データベースレコード(データ)を定義するために使用される。INSERT、UPDATE、DELETE
  • DCL(Data Control Language):データ制御言語は、アクセス権限とセキュリティレベルを定義するために使用される。
  • DQL(Data Query Language):データ検索言語で、レコード(データ):SELECT
  • 注意:sql文以;ラスト
  • MySqlコマンドalter add:テーブルのフィールドを追加します。
    alter addコマンドは、テーブルのフィールドを追加します。
    alter add命令フォーマット:ALTER TABLE City CONVERT TO CHARACTER SET gbk;例えば、テーブルMyClassにフィールドパスを追加しました。タイプはint(4)で、デフォルトは0:alter table add ;です。
  • プラスインデックスalter table MyClass add passtest int(4) default '0';
  • 例:alter table add index ( 1[, 2 …]);
  • プライマリキーを付加したインデックスalter table employee add index emp_name (name);
  • 例:alter table add primary key ( );
  • 一意制限条件付きインデックスalter table employee add primary key(id);
  • 例:alter table add unique ( );
  • インデックスalter table employee add unique emp_name2(cardnumber);
  • を削除します。
    例:alter table drop index ;
  • 追加フィールドalter table employee drop index emp_name;
  • 元のフィールド名とタイプALTER TABLE table_name ADD field_name field_type;例を修正し、元のフィールドbithdayが間違っていました。下のフィールド名を変更します。ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
  • 削除フィールドALTER TABLE users CHANGE birthady birthday VARCHAR(50);
  • DDL:操作データベース、表、列など-----------------------------------------
    使用するキーワード:CREATE、ALTER、DROP
    ---------------------------------------
    --mydb 2という名前のデータベースALTER TABLE table_name DROP field_nameを作成します。mydb 2という名前のデータベースを作成して、その文字セットをgbk CREATE DATABASE IF NOT EXISTS mydb2;--クエリーに設定します。現在のデータベースサーバにあるすべてのデータベースCREATE DATABASE IF NOT EXISTS mydb2 CHARACTER SET gbk;を調べます。前に作成したmydb 2データベース定義の情報SHOW DATABASES;を調べます。
    --変更--サーバー内のデータベースを確認し、mydb 2の文字セットをutf 8 SHOW CREATE DATABASE mydb2;に変更します。
    --削除--前に作成したmydb 2データベースを削除するALTER DATABASE mydb2 CHARACTER SET utf8;--その他、現在使用されているデータベースDROP DATABASE mydb2;を確認します。mdb 2という名前のデータベースSELECT DATABASE();を切り替えます。
    -------------------------------------------表を作成する-----文法:
          1     ,
          2     ,
        ....
    );```
    --   :     ,          
    
    
    --             
    ```SHOW TABLES;```
    --              
    ```DESC    ;```
    --     emp            image ( image  )
    ```ALTER TABLE emp ADD image BLOB; ```
    --   job ,      60
    ```ALTER TABLE emp MODIFY job VARCHAR(60);```
    --   image ,      
    ```ALTER TABLE emp DROP image;```
    --   emp    user1
    ```RENAME TABLE emp TO user1;```
    --        gbk
    ```ALTER TABLE user1 CHARACTER SET utf8;```
    --     ename username
    ```ALTER TABLE user1 CHANGE ename username VARCHAR(100);```
    
    --    
    ```DROP TABLE user1;```
    
    ######  DML      ,          -----------------------------------------
    > DML           、 、    
           :INSERT、UPDATE、DELETE
       : MySql ,                       ,   NULL
    
    --      INSERT: ------------------
    --   :``` INSERT INTO   (  1,  2 ...)VALUES(  1,  2...);```
    --   :
    -- 1.        、  、       。
    -- 2.       java    ,       。           。
    -- 3.      ,   null
    -- 4.          ,        。
    
    --  emp       
    ```INSERT INTO emp(id,NAME,gender,birthday,salary,entry_date,RESUME)
    VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','good girl');```
    --     
    ```INSERT INTO emp VALUES
    (4,'zs','m','2015-09-01',10000,'2015-09-01',NULL),
    (5,'li','m','2015-09-01',10000,'2015-09-01',NULL),
    (6,'ww','m','2015-09-01',10000,'2015-09-01',NULL);```
    
    --      UPDATE ----------
    --   :```UPDATE    SET    1=   2... WHERE   = ```
    --            5000 
    ```UPDATE emp SET sal=5000;```
    --     'ALLEN'      3000 
    ``` UPDATE emp SET sal=3000 WHERE username='ALLEN';```
    --     'ALLEN'        10000, job   CTO
    ```UPDATE emp SET sal=10000,job='CTO' WHERE username='ALLEN';```
    --     ’ALLEN‘             1000
    ```UPDATE emp SET sal=sal+1000 WHERE username='ALLEN';```
    
    --      DELETE ------------------------
    --   ``` DELETE FROM    [where   = ]```
    --   emp        ’ALLEN‘   
    ```DELETE FROM emp WHERE username='ALLEN';```
    --    emp        
    ```DELETE FROM emp;```
    --   truncate  emp    
    ```TRUNCATE TABLE emp;```
    --   :
    -- 1.DELETE        ,     ;          
    -- 2.TRUNCATE        DROP ,            。         。     DELETE 。
    
    
    ###### DQL(      )-----------------------------------------
    >DQL        ,     DQL           ,               :
    
    --   :
    -- select selection_list --        
    -- From table_list --        
    -- group by grounping_columns --        
    -- having condition --        
    -- order by sorting_columns --        
    -- limit offset_satrt,row_count --     
    
    --  emp      
    
    INSERT INTO emp(id,NAME,gender,birthday,salary,entry udute,RESUME)VALES(1,'ossey',g''2011-01'20000,'2012-11-10','verygood boy');
    INSERT INTO emp(id、NAME、gender、birthday、salary、entry udte、RESUME)VALES(2、'sey'、'g'、2010-02-08'、20000、'2013-10-11'、'good boy');INSERT INTO emp(id,NAME,gender,birthday,salary,entry udte,RESUME)VALES(3,'郑爽','mm',3000,'2015-03-09','good girl');
    INSERT INTO emp(id、NAME、gender、birthday、salary、entry udute、RESUME)VALES(4、'周杰倫'、'g'、'2015-02-03'、3000、'2016-03-08'、'good boy');
    
    --           5000 
    ```UPDATE    emp SET     salary=5000;```
    
    --     ‘sey’        3000
    ```UPDATE    emp SET    salary=30000 WHERE NAME='sey';```
    
    --     ‘ossey’        40000,      
    ```UPDATE   emp SET salary=40000,gender='g' WHERE NAME='ossey';```
    
    --    ‘sey’           10000
    ```UPDATE emp SET salary=salary+10000 WHERE NAME='sey';```
    
    -- Delete  
    --        'sey'   
    ```DELETE FROM emp WHERE NAME='sey';``  
    
    --         
    ```DELETE FROM emp;```
    --   truncate      ,     :     drop   ,            
    ```TRUNCATE TABLE emp;```
    
    ```SELECT   * FROM emp;```
    
    --     
    ```SELECT * FROM USER;```
    
    --    s     
    ```SELECT   * FROM emp WHERE NAME LIKE 's%';```
    
    --         o     
    ```SELECT * FROM emp WHERE NAME LIKE '%o%';```
    
    --         
     
     
     --       ------------------------------
     ```CREATE TABLE stu(
        sid CHAR(6),
        sname VARCHAR(50),
        age INT,
        gender VARCHAR(50)
     );```
     
    --    
    ```SELECT * FROM stu;```
    
    --     
    
    INSERT INTO stu VALL('S_1001'、'LiuYi',35,'male')INSERT INTO stu VALL('S_1002'、'ChenErre',15,'female')INSERT INTO stu VALL('S_1003'、'ZhangSan'95、'male')INSERT INTO stuo VALES('S_1004'、'LiSi'65,'male')INSERT INTO stuo VALES('Syu 1005'、'WangWu',55,'male')INSERT INTO stu VALL('S_1006'、'zhaoLiu'75、'female')INSERT INTO stu VALL('S_1007'、'sunQi',25,'male')INSERT INTO stu VALL('Syu 1008'、'zhouBa',45,'female')INSERT INTO stu VALL('Syu 1009'、'wuJiu',85,'male')INSERT INTO stu VALL('S_1010'、'zhengShi'、5、'female')INSERT INTO stu VALL('S_1011'、'xxxxx'、NULL);
    
    --       emp -----------------------------------------------------------
    ```CREATE TABLE emp(
        empno INT,          --     
        ename VARCHAR(50),  --     
        job VARCHAR(50),    --     
        mgr INT,        --      
        hiredate DATE,      --     
        sal DECIMAL(7,2),   --   
        comm DECIMAL(7,2),  --   
        deptno INT      --     
    );```
    
    --   emp 
    ```SELECT * FROM emp;```
    
    --  emp        
    
    INSERT INTO emp VULES(7369,SMITH'、'CLERK'7902,'1980-12-17',800,NULL,20);INSERT INTO emp VALLES(7499、'ALLEN'、'SALESMAN'、7698、'1981-02-20'、1600,300,30);INSERT INTO emp VALLEES(7521、「WARD」、「SALESMAN」、7698、「1981-02-22」、1250,500,30);INSERT INTO emp VULES(7566,JONES'、'MANAGER'7839,'1981-04-02',2975,NULL,20);INSERT INTO emp VULES(7654,MART IN',SALESMAN',7698,'1981-09-28',1250,1400,30);INSERT INTO emp VULES(7698、「BLAKE」、「MANAGER」、7839、「1981-05-01」、2850、NULL、30);INSERT INTO emp VULES(7782、'CLARK'、'MANAGER'7839、'1981-06-09'、2450、NULL、10)INSERT INTO emp VALLUES(7788、SCOTT'、ANALYST'7566、'1987-04-19'、3000、NULL、20);INSERT INTO emp VULES(7839、「KING」、「PRESIDENT」、NULL、「1981-17」、5000、NULL、10);INSERT INTO emp VULES(7844、‘TURNER’、‘SALESMAN’、7698、'1981-09-08'、1500,0,30);INSERT INTO emp VULES(7876、「ADAMS」、「CLERK」、7788、「1987-05-23」、1100、NULL、20);INSERT INTO emp VULES(7900,JAMES'、'CLERK',7698,'1981-12-03',950,NULL,30);INSERT INTO emp VALLES(7902、「FORD」、「ANALYST」、7566、「1981-12-03」、3000、NULL、20);INSERT INTO emp VALES(7934、'MILLER'、'CLERK'7782、'1982-01-23'、1300、NULL、10)
    --   emp     -------------
    ```CREATE TABLE dept(
        deptno INT,     --     
        dname VARCHAR(14),  --     
        loc VARCHAR(13)     --     
    );```
    
    --   dept 
    ```SELECT * FROM dept;```
    --           
    
    INSERT INTO dept VALES(10、「ACCOUNTING」、「NEW YORK」)INSERT INTO dept VALLES(20、'RESEARCH'、'DALLAS')INSERT INTO dept VALES(30、'SALES'、'CHICAGO')INSERT INTO dept VALES(40、'OPRATIONS'、'BOTON');
    -- 1.     -------------
    -- 1.1      
    ```SELECT * FROM emp;```
    -- 1.2      ,    emp  ename deptno     
    ```SELECT ename, deptno FROM emp;```
    
    -- 2.     -------------
    -- 2.1      30,      1000   
    ```SELECT *FROM emp WHERE deptno=30 AND comm<1000;```
    -- 2.2    ename ALLEN    ename WARD     
    ```SELECT * FROM emp WHERE ename='ALLEN' OR ENAME='WARD';```
    -- 2.3   deptno     20,30,50   
    ```SELECT * FROM emp WHERE deptno IN(20,30,50);```
    -- 2.4         20,30, 50   
    ```SELECT * FROM emp WHERE deptno NOT IN(20, 30, 50);```
    -- 2.5      null   
    ```SELECT * FROM emp WHERE comm IS NULL;```
    -- 2.6      1000 1500     
    --      
    ```SELECT * FROM emp WHERE comm>=1000 AND comm<=1500;```
    --      
    ```SELECT * FROM emp WHERE comm BETWEEN 1000 AND 1500;```
    -- 2.7             
    ```SELECT * FROM emp WHERE comm IS NOT NULL;```
    
     -- 3      -----------------------------------
     --          a      ,           ,            LIKE
     -- 3.1   ename 5           
     ```SELECT * FROM emp WHERE ename LIKE '_____'; ```-- 5      5    
     --         LIKE   。  '_'        ,5 '_'  5     
     
    -- 3.2      5     ,   5    ’s‘     
    ```SELECT * FROM emp WHERE ename LIKE '____s';```
    -- 3.3        'J'       
    ```SELECT * FROM emp WHERE ename LIKE 'J%';```
    --   '%'  0~n     
    -- 3.4            's'     
    ```SELECT * FROM emp WHERE ename LIKE '%s%';```
    
     -- 4        -----------------------------------
     -- 4.1       
     --       (                ),   emp  sal          。    emp  sal   ,         ,       DISTINCT
    ``` SELECT DISTINCT sal FROM emp;```
     -- 4.1             
     --   sal(    ) comm(  )           ,         。    sal comm              ,      ;
     --     sal  comm          NULL ,     NULL,           :   NULL,  0,      ,       IFNULL();
    ``` SELECT *, sal+IFNULL(comm,0) FROM emp;```
     -- 4.3        
     --              sal+ifnull(comm,0),      ,             total:
     --       ,     AS    
     ```SELECT *,sal+IFNULL(comm,0) AS total FROM emp;```
     
     -- 5    -----------------------------------
     -- 5.1         ,        
     ```SELECT * FROM emp ORDER BY deptno ASC;```
     --            ASC,ORDER BY        
    ``` SELECT * FROM emp ORDER BY deptno;```
     -- 5.2         ,        
    ``` SELECT * FROM emp ORDER BY deptno DESC;```
     -- 5.2       ,        ,       ,        
    ``` SELECT * FROM emp ORDER BY sal DESC , deptno ASC;```
     
     -- 6      -----------------------------------
     --                :
     -- COUNT():        NULL     ;
     -- MAX():          ,           ,           ;
     -- MIN():          ,           ,           ;
     -- SUM():          ,             ,       0;
     -- AVG():          ,             ,       0;
     
     -- 6.1 COUNT
     --           COUNT();
     --   emp     :
    ``` SELECT COUNT(*) AS    FROM emp;```
     --   emp        
    ``` SELECT COUNT(comm)    FROM emp; ```
     --   :  COUNT()       comm     ,     commlie NULL   
     --   emp      2500   
    ``` SELECT COUNT(*) AS    FROM emp WHERE sal>2500;```
     --            2500     
    ``` SELECT COUNT(*) AS    FROM emp WHERE sal+IFNULL(comm,0)>2500;```
     --         ,        
    ``` SELECT COUNT(comm) AS       , COUNT(mgr) AS        FROM emp;```
     
     -- 6.2 SUM() AVG()
     --           SUM()  
     --           
     ```SELECT SUM(sal) AS     FROM emp;```
     --           ,          
    ``` SELECT SUM(sal) AS    , SUM(comm) AS     FROM emp;```
     --            
    ``` SELECT SUM(sal), COUNT(sal) FROM emp;```
     --         
    ``` SELECT AVG(sal) FROM emp;```
     
     -- 6.3 MAX() MIN()
     --            
    ``` SELECT MAX(sal), MIN(sal) FROM emp;```
     
     -- 7      -----------------------------------
     -- 7.1           
     ```SELECT COUNT(*) FROM emp WHERE deptno IS NOT NULL GROUP BY deptno;```
     --      deptno    ,                      
     --           ,       
    ``` SELECT deptno, COUNT(*) FROM emp WHERE deptno IS NOT NULL GROUP BY deptno;```
     --                    1500   
    ``` SELECT deptno, COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;```
     
     -- 7.2 HAVING  
     --         9000           :
     ```SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;```
     --   :HAVING WHERE   :
     -- 1.having            。
     --   where            。
     -- 2.having          (    )。
     --   where           。
     -- where           ,           where     ,            ; having           
     
     -- 8 LIMIT -----------------------------------
     -- LIMIT            ,     
     -- 8.1   5   ,    0  
     ```SELECT * FROM emp LIMIT 0,5;```
     --   :        0   ,           
     -- 8.2   10   ,    3  
    ``` SELECT * FROM emp LIMIT 3,10;```
     -- 8.3     
     --        10 ,     3         ?
     -- 1.         0,    10 ;
     -- 2.         10,    10 ;
     -- 3.         20,     10 ;
     -- 8.3     
     --         
     -- select - from - where - group by - having - order by - limit
     --         
     -- from - where - group by - having - select - order by - limit