MySQL(五)上DQLデータ照会言語(sql文)

26445 ワード

詳細SQL情報:w 3 c SQL標準ドキュメントを表示できます
DQL:まずテスト環境を構築します.
mysql -uroot -proot

show databases;              
drop database test;         
create database test CHARACTER SET 'utf8';
use test;
drop table if exists empl;

create table empl(
    id int primary key auto_increment,
    name varchar(50),
    department_id int,
    hire DATE,
    phone CHAR(20),
    job VARCHAR(50),
    comm decimal(8,2),
    sal float(8,2),
    CONSTRAINT fk_empl_dept FOREIGN KEY (department_id) REFERENCES department (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table department(
    id int primary key auto_increment,
    dname VARCHAR(50)
)default charset=utf8;

alter table empl rename to    ; //    table
alter table empl modify job varchar(40);   //      
alter table empl add(note varchar(200))   //    
alter table empl drop note                //    

プライマリ・キーの削除
ALTER TABLE empl MODIFY COLUMN id INTEGER(11) NOT NULL;
        
ALTER TABLE empl DROP INDEX PRIMARY;

プライマリ・キーの追加
ALTER TABLE `user` MODIFY COLUMN `id` INT AUTO_INCREMENT PRIMARY KEY;

外部キーを追加:
ALTER TABLE `empl` ADD CONSTRAINT `fk_empl_dept` FOREIGN KEY 
(`department_id`) REFERENCES `department` (`id`);

データの挿入
insert into department values (10,'  '),(20,'  '),(30,'  '),(40,'  ');

insert into empl VALUES(0,'  ','10','2000-12-22',123456789,'  ',8000.00);
insert into empl VALUES(0,'   ','10','2002-7-12',123499689,'  ',20000.00);
insert into empl VALUES(0,'  ','10','2001-10-2',123422229,'  ',16000.00);
insert into empl VALUES(0,'  ','10','2002-7-12',123499989,'  ',8700.00);
insert into empl VALUES(0,'  ','10','2003-4-18',123433389,'  ',8400.00);
insert into empl VALUES(0,'  ','10','2003-4-18',123433389,'  ',8400.00);
insert into empl VALUES(0,'  ','10','2003-4-18',123433389,'  ',8400.00);
insert into empl VALUES(0,'  ','10','2003-4-18',123433389,'  ',8400.00);

insert into empl VALUES(0,'  ','20','2003-2-10',123455789,'  ',1000.00);
insert into empl VALUES(0,'  ','20','2001-8-17',123458889,'  ',6000.00);
insert into empl VALUES(0,'   ','20','2003-2-10',123455789,'  ',10000.00);
insert into empl VALUES(0,'  ','20','2003-2-10',123455789,'  ',10000.00);
insert into empl VALUES(0,'   ','20','2002-4-11',123453789,'  ',8000.00);
insert into empl VALUES(0,'   ','20','2003-2-10',123455789,'  ',19000.00);
insert into empl VALUES(0,'  ','20','2003-2-10',123455789,'  ',10000.00);
insert into empl VALUES(0,'   ','20','2002-4-11',123453789,'  ',8000.00);
insert into empl VALUES(0,'  ','20','2003-2-10',123455789,'  ',19000.00);

insert into empl VALUES(0,'  ','30','2003-2-10',123455789,'  ',1000.00);
insert into empl VALUES(0,'  ','30','2001-8-17',123458889,'  ',6000.00);
insert into empl VALUES(0,'  ','30','2003-2-10',123455789,'  ',19000.00);
insert into empl VALUES(0,'  ','30','2002-4-11',123453789,'  ',8000.00);
insert into empl VALUES(0,'  ','30','2002-4-11',123453789,'  ',8000.00);
insert into empl VALUES(0,'  ','30','2003-2-10',123455789,'  ',19000.00);
insert into empl VALUES(0,'   ','30','2003-2-10',123455789,'  ',10000.00);
insert into empl VALUES(0,'  ','30','2001-8-17',123458889,'  ',6000.00);

列の追加:表彰列の追加
alter table empl add(comm decimal(9,2));

評価ランダム値の挿入
update empl set sal=round(rand()*10000,-3), comm=round(rand()*10000,-3),
phone=(28000000+round(RAND()*100000,0))
where 1=1;

注記:round四捨五- 3は小数点後-3位を表します.rand 0~1乱数
管理カラムを追加し、値を割り当てます:()
ALTER TABLE `empl` ADD(mgr int);

サブクエリで文を更新します.
update empl e,(select * from empl where job="  ") d set e.mgr=d.id 
where e.department_id=d.department_id and e.job!="  ";

文を削除:
delete from empl where id=8;

変更:
update empl set job='  ',sal=20001 where name='  ';

関数:重量除去:distinct例:select distinct job from empl;データ接続:concatケース:select concat(' ',name,', ',job) as ' ' from empl;≪置換|Replace|ldap≫:空の場合は、次の値を指定します.
select *,IFNULL(manager,'   ') from empl;

ファジイクエリ:''1文字'%'の代わりに0~N文字に一致
select * from empl where name like ' __';
select * from empl where name like '% %';

ソート:Order by昇順asc降順desc(デフォルトはasc昇順)
select * from empl order by sal desc;
select * from empl where manager is not null order by sal desc,hire desc,job desc;

集約:
総数:count(*)空の場合は積算に参加しません例えばmanagerにnullが2つあります
select concat('      ',count(*) ,' ,      :'
 ,count(manager)  ) '  ' from empl;

平均値avg()最大max()最小min()和sum(sal);計算できない場合は、たとえば漢字の代わりにデフォルトで0を使用します.
select sum(sal)  '  ',avg(sal) '  ',max(sal) '  ',min(sal) '  ' from empl;

グループクエリーgroupbyグループフィールドは、各部門の従業員数を計算します.
select job,count(*),max(sal) from empl group by job;

各部門の給与が12000を超える従業員の数を計算します.
select job,count(*),max(sal) from empl where sal>12000 group by job;

havingは前のクエリの結果を条件として判断する.各部門の従業員の給料が12000より大きく、2人以上の部門を見つけます.
select job,count(*),max(sal) from empl where sal>12000 group by job having count(*)>=2;

内部リンクないりんく:inner
外部リンク:左外部リンク:left outer join左のテーブルを主とし、右が空でnullで塗りつぶす
select d.dname, e.name from 
department d LEFT OUTER JOIN   empl e
on e.department_id=d.id

右外部リンク:right outer joinは右側のテーブルを主とし、左は空でnullで埋め込まれます.
select d.dname, e.name from 
department d right OUTER JOIN  empl e
on e.department_id=d.id

全外リンクの真ん中にunionリンクを使用します.(作用、左右のどちらかを多用する場合)
select d.dname, e.name from 
department d LEFT OUTER JOIN   empl e
on e.department_id=d.id
union
select d.dname, e.name from 
department d right OUTER JOIN   empl e
on e.department_id=d.id

サブクエリ:サブクエリが表示される場所は、select(サブクエリが標準ではない)from(サブクエリ)where(サブクエリ)
例:
from(   ):
select e.* from (select max(sal) sal from empl) es,empl e where e.sal = es.sal;

where(   ):
select * from empl where sal=(select max(sal) from empl);

ページング:limitの開始位置、何本取るか;
select * from empl  limit 0,5;
select * from empl  limit 5,5;
select * from empl  limit 10,5;

関数:テーブル挿入テーブル:select*intoインデックス作成CREATE INDEX条件チェックチェックチェック