SQL(1)SQLの基礎
SQLとは?
SQLは構造化クエリー言語であり、構造化クエリー言語と呼ばれ、リレーショナルデータベース管理システム(RDBMS)のデータを管理するために設計された特殊な目的のプログラミング言語である.リレーショナル・データベース管理システムでのデータの取得と管理、データベース・モードの作成と変更、データベース・オブジェクト・アクセスの調整のために設計されています.
短文を構成するSQL言語要素といくつかを表示します.
出典:ウィキペディア
DB(DATABASE)とは?
データベースは、複数の人が共有し、使用できるように組織、統合、管理されたデータのセットです.これは、作成されたリストによって複数のアプリケーションシステムの統合情報を格納し、実行できる共通データのセットです.
出典:ウィキペディア
上記のDBでは、特定のテーブル(借用契約書)を確認してインポートすると、「SELECT*FROM借用履歴」がSQLになります.
クエリの基本構造
<テーブル名:借書履歴>
画像を見ると、図書館で管理されているDBであることがわかります.
[ID列(column)]
[最初の行(行)]
テーブルを使用して基本構造を検証しましょう.
import os
db_path = os.getenv('HOME')+'/mydb.db'
conn = sqlite3.connect(db_path)
c = conn.cursor()
for row in c.execute('SELECT * FROM 도서대출내역'):
print(row)
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('101', '문강태', 'ccc', '2020-06-20', '2020-06-25')
('102', '고문영', 'bbb', '2020-06-01', None)
('102', '고문영', 'ddd', '2020-06-08', None)
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')
('104', '강기둥', None, None, None)
すべてのクエリー
SELECT*FROM図書貸し出し履歴;
for row in c.execute('SELECT * FROM 도서대출내역'):
print(row)
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('101', '문강태', 'ccc', '2020-06-20', '2020-06-25')
('102', '고문영', 'bbb', '2020-06-01', None)
('102', '고문영', 'ddd', '2020-06-08', None)
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')
('104', '강기둥', None, None, None)
SELECTとFROMの間に特定の列を挿入して出力します.上のクエリに示すように、星(*)を入力すると、テーブル全体にコマンドが入力されます.特定の列の指定
SELECT ID FROM図書貸し出し履歴:
for row in c.execute('SELECT ID FROM 도서대출내역'):
print(row)
>>>
('101',)
('101',)
('102',)
('102',)
('103',)
('104',)
SELECTとFROMの間に「ID」を挿入すると、コマンドは「テーブル全体にID列のみ入力」となります.入力条件
SELECT*FROM図書貸し出し履歴
WHERE名=「文康泰」;
for row in c.execute('SELECT * FROM 도서대출내역 WHERE 이름 = "문강태";'):
print(row)
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('101', '문강태', 'ccc', '2020-06-20', '2020-06-25')
SELECTとFROMの間に*があり、列全体をインポートし、WHEREセクションを追加することを示します.WHEREセクションの後に、特定の条件を入力できます.「名前=「文康泰」と書いてあり、文康泰という名前の人を連れてきます.GROUP BYによる重複除外
SELECT名称FROM図書貸し出し履歴
GROUP BY名称;
for row in c.execute('SELECT 이름 FROM 도서대출내역 GROUP BY 이름;'):
print(row)
('강기둥',)
('고문영',)
('문강태',)
('문상태',)
GROUP BYは、データを名前でグループ化する役割です.GROUP BYは、通常、集約関数とともに使用される.DISTINCTによる重複除外
SELECT DISTINCT名称FROM図書貸し出し履歴;
for row in c.execute('SELECT DISTINCT 이름 FROM 도서대출내역;'):
print(row)
>>>
('문강태',)
('고문영',)
('문상태',)
('강기둥',)
ORDER BYでソート
SELECT*FROM図書貸し出し履歴
ORDER BY ID ;
for row in c.execute('SELECT * FROM 도서대출내역 ORDER BY ID ;'):
print(row)
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('101', '문강태', 'ccc', '2020-06-20', '2020-06-25')
('102', '고문영', 'bbb', '2020-06-01', None)
('102', '고문영', 'ddd', '2020-06-08', None)
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')
('104', '강기둥', None, None, None)
ORDER BYの後に特定のカラム名が書かれている場合は、カラムに対する値として表示されます.上のクエリ文では、SELECTとFROMの間にアスタリスク(*)があり、「列全体をインポートしますが、IDでソートしてください」という意味です.通常、ORDER BYの後は省略する(ASC).昇順はデフォルト設定です.逆にDESCを降順で書く
SELECT*FROM図書貸し出し履歴
ORDER BY ID DESC ;
for row in c.execute('SELECT * FROM 도서대출내역 ORDER BY ID DESC ;'):
print(row)
>>>
('104', '강기둥', None, None, None)
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')
('102', '고문영', 'bbb', '2020-06-01', None)
('102', '고문영', 'ddd', '2020-06-08', None)
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('101', '문강태', 'ccc', '2020-06-20', '2020-06-25')
ID降順で並べ替えます.特定行クエリー
SELECT*FROM借書歴史LIMIT 5;
for row in c.execute('SELECT * FROM 도서대출내역 LIMIT 5 ;'):
print(row)
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('101', '문강태', 'ccc', '2020-06-20', '2020-06-25')
('102', '고문영', 'bbb', '2020-06-01', None)
('102', '고문영', 'ddd', '2020-06-08', None)
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')
LIMIT構文の後に数字を入力すると、その数字に等しい行(行)のみが出力されます.LIMIT構文は、主に、テーブルを最初にクエリーするときに、これらのテーブルの構造を決定し、例としてどの値が存在するかを決定するために使用されます.SELECT名称、貸出日、返却日
FROM図書貸し出し履歴
ORDER BY借入日DESC
LIMIT 1;
for row in c.execute('SELECT 이름, 대출일, 반납일 FROM 도서대출내역 ORDER BY 대출일 DESC LIMIT 1;'):
print(row)
>>> ('문강태', '2020-06-20', '2020-06-25')
DISTINTとGROUP BY
基準に従って重複しない統計を行う場合は、統計関数とDISTINCTとGROUP BYを同時に使用する必要があります.
Q&A
Q.「借書履歴」表に、出力|名称|借書回数|の照会を記入してください.別名「COUNT(*)AS貸付数量」というGROUP BY名構文を使用する必要があります.
A.SELECT名称、COUNT(*)AS貸付数量FROM借書履歴GROUP BY名称
Reference
この問題について(SQL(1)SQLの基礎), 我々は、より多くの情報をここで見つけました https://velog.io/@cha-suyeon/SQL-1-SQL의-기본テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol