Monyamiau
Новичок
Есть скрипт созданной базы. Наверное, кривой и косой, но делали сами, старались.
Если вкратце - то всего 9 таблиц - справочник кодов валют, справочник филиалов, справочник типов счетов, справочник адресов, справочник мест работы, клиенты, счета, кредитные карты, история операций клиента, и их заполнения.
Запросы такие:
1. Отобразить количество кредитных карт для всех клиентов - т.е. таблицу "имя - фамилия - количество карт"
Это я осилила и даже работает! Вот:
select name_clienta, surname_clienta, count(*) kol, srok_deistvia
from scheta s
inner join cards c ON s.scheta_id=c.scheta_id
inner join clients cl ON cl.clients_id=s.clients_id
group by name_clienta, surname_clienta
2. Примерно в том же виде - количество карт с истекшим сроком. Если таких нет, то отобразить 0.
А тут проблема. Я написала такой запрос:
select a.kol as ist
from
(select name_clienta, surname_clienta, count(*) kol, srok_deistvia
from scheta s
inner join cards c ON s.scheta_id=c.scheta_id
inner join clients cl ON cl.clients_id=s.clients_id
group by name_clienta, surname_clienta) a
where (a.srok_deistvia<sysdate())
НО он сокращает всех, у кого карты действуют, т.е. их срок не истек! А нужно для всех-всех клиентов. И если не истек, то вывести 0. Как это сделать? Помогите, пожалуйста.
Вот скрипт создания базы.
CREATE DATABASE credit_db CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE credit_db.sprav_codov_valut
(sprav_codov_valut_id INT PRIMARY KEY,
code_valuty INT,
code_valuty_ISO INT,
nazvanie_valuty VARCHAR(255)
);
CREATE TABLE credit_db.sprav_filialov
(sprav_filialov_id INT,
PRIMARY KEY(sprav_filialov_id),
code_filiala INT,
nazvanie_filiala VARCHAR(255)
);
CREATE TABLE credit_db.sprav_tipov_schetov
(sprav_tipov_schetov_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(sprav_tipov_schetov_id),
code_tipa_scheta VARCHAR(5),
naim_tipa_scheta VARCHAR(255)
);
CREATE TABLE credit_db.sprav_adresov
(sprav_adresov_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(sprav_adresov_id),
code_adresa INT,
adres VARCHAR(255),
gorod VARCHAR(128),
strana VARCHAR(128),
pocht_index INT
);
CREATE TABLE credit_db.sprav_mest_raboty
(sprav_mest_raboty_id INT,
PRIMARY KEY(sprav_mest_raboty_id),
code_mesta_raboty INT,
nasvan_mesta_raboty VARCHAR(255),
code_adresa INT,
sprav_adresov_id INT NOT NULL,
FOREIGN KEY (sprav_adresov_id) REFERENCES sprav_adresov(sprav_adresov_id)
);
CREATE TABLE credit_db.clients
(clients_id INT,
PRIMARY KEY(clients_id),
code_clienta INT NOT NULL,
name_clienta VARCHAR(128) NOT NULL,
surname_clienta VARCHAR(128) NOT NULL,
code_adresa_propiski INT NOT NULL,
code_adresa_progiv INT NOT NULL,
code_mesta_raboty INT,
sprav_adresov_id INT NOT NULL,
sprav_mest_raboty_id INT NOT NULL,
FOREIGN KEY (sprav_adresov_id) REFERENCES sprav_adresov(sprav_adresov_id),
FOREIGN KEY (sprav_mest_raboty_id) REFERENCES sprav_mest_raboty(sprav_mest_raboty_id)
);
CREATE TABLE credit_db.scheta
(scheta_id INT,
PRIMARY KEY (scheta_id),
code_scheta INT NOT NULL,
code_clienta INT NOT NULL,
code_valuty INT NOT NULL,
code_filiala INT NOT NULL,
code_tipa_scheta INT NOT NULL,
nomer_scheta VARCHAR(128) NOT NULL,
sprav_codov_valut_id INT NOT NULL,
sprav_filialov_id INT NOT NULL,
sprav_tipov_schetov_id INT NOT NULL,
clients_id INT NOT NULL,
FOREIGN KEY (sprav_codov_valut_id) REFERENCES sprav_codov_valut(sprav_codov_valut_id),
FOREIGN KEY (sprav_filialov_id) REFERENCES sprav_filialov(sprav_filialov_id),
FOREIGN KEY (sprav_tipov_schetov_id) REFERENCES sprav_tipov_schetov(sprav_tipov_schetov_id),
FOREIGN KEY (clients_id) REFERENCES clients(clients_id)
);
CREATE TABLE credit_db.cards
(cards_id INT,
PRIMARY KEY(cards_id),
code_carty INT,
code_scheta INT,
nomer_carty VARCHAR(128) NOT NULL,
date_vipuska DATE,
srok_deistvia DATE,
scheta_id INT NOT NULL,
FOREIGN KEY (scheta_id) REFERENCES scheta(scheta_id)
);
CREATE TABLE credit_db.istoria_operaciy_clienta
(istoria_operaciy_clienta_id INT,
PRIMARY KEY(istoria_operaciy_clienta_id),
code_operacii INT NOT NULL,
code_clienta INT NOT NULL,
data_operacii DATE NOT NULL,
opisanie_operacii VARCHAR(255),
scheta_id INT NOT NULL,
FOREIGN KEY (scheta_id) REFERENCES scheta(scheta_id)
);
commit;
Если вкратце - то всего 9 таблиц - справочник кодов валют, справочник филиалов, справочник типов счетов, справочник адресов, справочник мест работы, клиенты, счета, кредитные карты, история операций клиента, и их заполнения.
Запросы такие:
1. Отобразить количество кредитных карт для всех клиентов - т.е. таблицу "имя - фамилия - количество карт"
Это я осилила и даже работает! Вот:
select name_clienta, surname_clienta, count(*) kol, srok_deistvia
from scheta s
inner join cards c ON s.scheta_id=c.scheta_id
inner join clients cl ON cl.clients_id=s.clients_id
group by name_clienta, surname_clienta
2. Примерно в том же виде - количество карт с истекшим сроком. Если таких нет, то отобразить 0.
А тут проблема. Я написала такой запрос:
select a.kol as ist
from
(select name_clienta, surname_clienta, count(*) kol, srok_deistvia
from scheta s
inner join cards c ON s.scheta_id=c.scheta_id
inner join clients cl ON cl.clients_id=s.clients_id
group by name_clienta, surname_clienta) a
where (a.srok_deistvia<sysdate())
НО он сокращает всех, у кого карты действуют, т.е. их срок не истек! А нужно для всех-всех клиентов. И если не истек, то вывести 0. Как это сделать? Помогите, пожалуйста.
Вот скрипт создания базы.
CREATE DATABASE credit_db CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE credit_db.sprav_codov_valut
(sprav_codov_valut_id INT PRIMARY KEY,
code_valuty INT,
code_valuty_ISO INT,
nazvanie_valuty VARCHAR(255)
);
CREATE TABLE credit_db.sprav_filialov
(sprav_filialov_id INT,
PRIMARY KEY(sprav_filialov_id),
code_filiala INT,
nazvanie_filiala VARCHAR(255)
);
CREATE TABLE credit_db.sprav_tipov_schetov
(sprav_tipov_schetov_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(sprav_tipov_schetov_id),
code_tipa_scheta VARCHAR(5),
naim_tipa_scheta VARCHAR(255)
);
CREATE TABLE credit_db.sprav_adresov
(sprav_adresov_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(sprav_adresov_id),
code_adresa INT,
adres VARCHAR(255),
gorod VARCHAR(128),
strana VARCHAR(128),
pocht_index INT
);
CREATE TABLE credit_db.sprav_mest_raboty
(sprav_mest_raboty_id INT,
PRIMARY KEY(sprav_mest_raboty_id),
code_mesta_raboty INT,
nasvan_mesta_raboty VARCHAR(255),
code_adresa INT,
sprav_adresov_id INT NOT NULL,
FOREIGN KEY (sprav_adresov_id) REFERENCES sprav_adresov(sprav_adresov_id)
);
CREATE TABLE credit_db.clients
(clients_id INT,
PRIMARY KEY(clients_id),
code_clienta INT NOT NULL,
name_clienta VARCHAR(128) NOT NULL,
surname_clienta VARCHAR(128) NOT NULL,
code_adresa_propiski INT NOT NULL,
code_adresa_progiv INT NOT NULL,
code_mesta_raboty INT,
sprav_adresov_id INT NOT NULL,
sprav_mest_raboty_id INT NOT NULL,
FOREIGN KEY (sprav_adresov_id) REFERENCES sprav_adresov(sprav_adresov_id),
FOREIGN KEY (sprav_mest_raboty_id) REFERENCES sprav_mest_raboty(sprav_mest_raboty_id)
);
CREATE TABLE credit_db.scheta
(scheta_id INT,
PRIMARY KEY (scheta_id),
code_scheta INT NOT NULL,
code_clienta INT NOT NULL,
code_valuty INT NOT NULL,
code_filiala INT NOT NULL,
code_tipa_scheta INT NOT NULL,
nomer_scheta VARCHAR(128) NOT NULL,
sprav_codov_valut_id INT NOT NULL,
sprav_filialov_id INT NOT NULL,
sprav_tipov_schetov_id INT NOT NULL,
clients_id INT NOT NULL,
FOREIGN KEY (sprav_codov_valut_id) REFERENCES sprav_codov_valut(sprav_codov_valut_id),
FOREIGN KEY (sprav_filialov_id) REFERENCES sprav_filialov(sprav_filialov_id),
FOREIGN KEY (sprav_tipov_schetov_id) REFERENCES sprav_tipov_schetov(sprav_tipov_schetov_id),
FOREIGN KEY (clients_id) REFERENCES clients(clients_id)
);
CREATE TABLE credit_db.cards
(cards_id INT,
PRIMARY KEY(cards_id),
code_carty INT,
code_scheta INT,
nomer_carty VARCHAR(128) NOT NULL,
date_vipuska DATE,
srok_deistvia DATE,
scheta_id INT NOT NULL,
FOREIGN KEY (scheta_id) REFERENCES scheta(scheta_id)
);
CREATE TABLE credit_db.istoria_operaciy_clienta
(istoria_operaciy_clienta_id INT,
PRIMARY KEY(istoria_operaciy_clienta_id),
code_operacii INT NOT NULL,
code_clienta INT NOT NULL,
data_operacii DATE NOT NULL,
opisanie_operacii VARCHAR(255),
scheta_id INT NOT NULL,
FOREIGN KEY (scheta_id) REFERENCES scheta(scheta_id)
);
commit;
Последнее редактирование: