Sql文
16757 ワード
データベースの概要:
データベース(DataBase,DB):コンピュータの記憶装置に長期保存され、一定の規則に従って組織され、各種のユーザーやアプリケーションに共有されるデータセットを指す。(ファイルシステム)
データベース管理システム(DataBase Management System、DBMS):データベースの安全性と完全性を保証するために、データベースを構築、使用し、維持するための大規模なソフトウェアを指す。ユーザはデータベース管理システムを通じてデータベース内のデータにアクセスします。
データベースソフトウェアはデータベース管理システムであるべきです。データベースはデータベース管理システムによって作成され、操作されます。
データベース:データのセットを保存、維持、管理します。
MySqlとSQLiteの違い
SQLiteは単一マシンデータベースです。機能は簡単で、小型化、最大ディスク効率を追求するMySqlは完璧なサーバデータベースです。機能は全面的で、総合化して、最大の同時性のMySql、Syboase、Oracleなどを追求して、これらはすべてサーバのデータ量の大きい機能で試用するので、多くインストールが必要で、例えばウェブサイトのアクセス量は比較的に大きいです。SQLiteは小型データベースで、簡単に移植できるので、インストールする必要がないです。いくつかのファイルが必要です。一般的な携帯電話、端末などが多く使われています。
もし単一のマシンだけで使うなら、データ量はそんなに多くなくて、プログラム上のデータの処理もあまり複雑ではないなら、SQLiteを使うのが適当です。
MySqlを使う登録Mysql: を入力します。アンインストール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サービス運行停止入力 を停止します。 cmdでmysqldを入力します。skyp-grant-tables起動サーバカーソルが動かない(このウィンドウを閉じないでください) 新しくcmdを開けてmysql-uユーザ名-pを入力します。パスワードが必要ではありません。 。二つのcmdウィンドウを閉じ、タスクマネージャでmysqldプロセスを終了する 。サービス管理ページでmysqlサービスを再開し、パスワード修正が完了しました。 は、SQLyogオペレーティングデータベースを使用することもできます。SQLyogは、簡単に使用され、簡単で簡潔なグラフィックス管理MYSQLデータベースのツールです。どこでも効率的にデータベース を管理することができます。
MySQLにデータを導入するとエラーが発生しました。 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命令フォーマット:プラスインデックス 例:プライマリキーを付加したインデックス 例:一意制限条件付きインデックス 例:インデックス を削除します。
例:追加フィールド 元のフィールド名とタイプ 削除フィールド DDL:操作データベース、表、列など-----------------------------------------
使用するキーワード:CREATE、ALTER、DROP
---------------------------------------
--mydb 2という名前のデータベース
--変更--サーバー内のデータベースを確認し、mydb 2の文字セットをutf 8
--削除--前に作成したmydb 2データベースを削除する
-------------------------------------------表を作成する-----文法:
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');
データベース(DataBase,DB):コンピュータの記憶装置に長期保存され、一定の規則に従って組織され、各種のユーザーやアプリケーションに共有されるデータセットを指す。(ファイルシステム)
データベース管理システム(DataBase Management System、DBMS):データベースの安全性と完全性を保証するために、データベースを構築、使用し、維持するための大規模なソフトウェアを指す。ユーザはデータベース管理システムを通じてデータベース内のデータにアクセスします。
データベースソフトウェアはデータベース管理システムであるべきです。データベースはデータベース管理システムによって作成され、操作されます。
データベース:データのセットを保存、維持、管理します。
MySqlとSQLiteの違い
SQLiteは単一マシンデータベースです。機能は簡単で、小型化、最大ディスク効率を追求するMySqlは完璧なサーバデータベースです。機能は全面的で、総合化して、最大の同時性のMySql、Syboase、Oracleなどを追求して、これらはすべてサーバのデータ量の大きい機能で試用するので、多くインストールが必要で、例えばウェブサイトのアクセス量は比較的に大きいです。SQLiteは小型データベースで、簡単に移植できるので、インストールする必要がないです。いくつかのファイルが必要です。一般的な携帯電話、端末などが多く使われています。
もし単一のマシンだけで使うなら、データ量はそんなに多くなくて、プログラム上のデータの処理もあまり複雑ではないなら、SQLiteを使うのが適当です。
MySqlを使う
mysql -u -p
回車、パスワード入力を提示する時にパスワードmysql -u -p
はmysqlユーザパスワードを変更しました。services.msc
はmysqlサービス、またはcmd-->net stop mysql
use 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文の分類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);
使用するキーワード: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