【Java Web】MySQLの詳しい知識ポイント(DDL、DML、DQL、制約)

MySQL

DDL

注: 以下では例として db1 を使用しています。

1. 運用データベース

(1) お問い合わせ

SHOW DATABASES;

(2)作成

CTEATE DATABASE db1;
CTEATE DATABASE IF NOT EXISTS db1;

(3) 削除

DROP DATABASE db1;
DROP DATABASE IF EXISTS db1;

(4) データベースの利用

SELECT DATABASE();
USE db1;

2. 動作表

(1) 作成する

# cmd
create table tb_user(
    -> id int,
    -> username varchar(20),
    -> password varchar(32)
    -> );

(2) お問い合わせ

show tb_user;
desc tb_user; #查看表的状态

(3) 削除

drop table tb_user;
drop table if exists tb_user;

(4) 修正

テーブル名の変更

alter table usere rename to daqi;

列の追加

alter table daqi add mysqlee int;

列の削除

alter table daqi drop mysqlee;

データ型を変更する

alter table daqi modify name varchar(40);

列名とデータ型を変更する

alter table daqi change name namedq int;

DML

アクションテーブルのデータ

1. データを追加する

insert into daqi(id,name) values(1123242,"张三");

# 给所有列赋值时不用在表后面加()
insert into daqi values(1123,"李四","男","dkfjdk");
# 批量添加用","隔开values后面的()

2. データを変更する

update daqi set sex = '女' where name = '张三';

3. データを削除する

delete from daqi where name = '张三';

DQL

1.条件付きクエリ

select * from daqi where id between 1124 and 1128;

select * from daqi where address is null;

# like模糊查询(可以查姓氏),%为多个位,_为后一个位(如查“达”性,只能查到达三,达四)
select * from daqi where name like '达%';

2. 並べ替えクエリ

昇順

select * from daqi order by id asc;
# 其中asc是默认值,可以省略

降順

select * from daqi order by id desc;

複数レベルの並べ替え

# 当第一个排序规则一样时,按第二个规则排序
select * from daqi order by id asc,idelse asc;

3. グループクエリ

集計関数

注: null は集計関数の操作には関与しません。

# 统计数量 注:不统计null的值
select count(id) from daqi;
# 统计行数,建议如下
select count(*) from daqi;

# 求和
select sum(id) from daqi;

# 求最小值
select min(id) from daqi;

# 求最大值
select max(id) from daqi;

# 求平均数
select avg(id) from daqi;

グループクエリ

# 其中where在分组前限定,having在分组后进行过滤
select sex, sum(id),count(*) from daqi where id > 100 group by sex having count(*) > 1;

4.ページングクエリ

# limit 起始索引,查询条数
#起始索引 = (当前页码 - 1)* 查询条数(每页显示的条数)
select * from daqi limit 0, 3; 

select * from daqi limit 3, 3; 

制約

# auto_increment为自增
CREATE TABLE emp (
	id INT PRIMARY KEY auto_increment,
	ename VARCHAR ( 50 ) NOT NULL UNIQUE,
	joindate date NOT NULL,
	salary DOUBLE ( 7, 2 ) NOT NULL,
bonus DOUBLE ( 7, 2 ) DEFAULT 0 
)

外部キーが追加されました

2 つのテーブルをリンクする

テーブルを作成する前に

CREATE TABLE yuan_gong (
	id INT PRIMARY KEY,
	ename VARCHAR ( 50 ) NOT NULL,
	bu_men_id INT NOT NULL,
	CONSTRAINT fk_yuan_gong_bu_men FOREIGN KEY ( bu_men_id ) REFERENCES bu_men ( id )	
);

テーブルを作成した後

ALTER TABLE yuan_gong ADD CONSTRAINT fk_yuan_gong_bu_men FOREIGN KEY ( bu_men_id ) REFERENCES bu_men ( id )

消去

ALTER TABLE yuan_gong drop foreign key fk_yuan_gong_bu_men;

データベース設計

テーブル関係

1 対 1: 関連付け、外部キーは一意に設定されます

1対多(多対1):従業員と部門など

多対多: 中間テーブルが必要です

alter table tb_order_goods add constraint fk_order_id foreign key(order_id) references tb_order(id);

alter table tb_order_goods add constraint fk_goods_id foreign key(goods_id) references tb_goods(id);

複数テーブルのクエリ

1. 内部結合(交差)

暗黙的な内部結合

select * from yuan_gong, bu_men where yuan_gong.bu_men_id = bu_men.id;

# 起别名 t1和t2
select t1.ename, t2.ename from yuan_gong t1, bu_men t2 where t1.bu_men_id = t2.id;

明示的な内部結合

select * from yuan_gong join bu_men on yuan_gong.bu_men_id = bu_men.id;

外部結合 (左/右テーブル + 交差)

# 左连接
select * from yuan_gong left join bu_men on yuan_gong.bu_men_id = bu_men.id;

# 右连接
select * from yuan_gong right join bu_men on yuan_gong.bu_men_id = bu_men.id;

2. サブクエリ(ネスト)

クエリ内のネストされたクエリ

select * from yuan_gong where id > (select id from yuan_gong where ename = '张三');

おすすめ

転載: blog.csdn.net/weixin_62726289/article/details/122353670