SQL. puzzles Entertaining

Silav Habr!

Zêdetirî 3 salan e ku ez SQL di navendên perwerdehiyê yên cihêreng de hîn dikim, û yek ji çavdêriyên min ev e ku xwendekar SQL çêtir fêr dibin ger ku peywirek ji wan re were dayîn, ne tenê li ser îmkan û bingehên teorîk were gotin.

Di vê gotarê de, ez ê navnîşa xwe ya pirsgirêkên ku ez wekî karê malê didim xwendekaran û ku em li ser wan cûrbecûr bahozên mêjî pêk tînin, bi we re parve bikim, ku rê li ber têgihiştinek kûr û zelal a SQL vedike.

SQL. puzzles Entertaining

SQL (ˈɛsˈkjuˈɛl; Zimanê îngilîzî yê pirsiyarê birêkûpêk) zimanek bernamesaziya daxuyandî ye ku ji bo afirandina, guheztin û birêvebirina daneyan di databasek têkildar de ku ji hêla pergalek rêveberiya databasê ya guncan ve tê rêvebirin tê bikar anîn. More details

Hûn dikarin li ser SQL ji cûrbecûr bixwînin çavkaniyên.
Ev gotar ne armanc e ku hûn SQL ji nû ve hîn bikin.

De ka em herin.

Em ê yên naskirî bikar bînin Plana HR li Oracle bi tabloyên xwe (zêde):

SQL. puzzles Entertaining
Ez not dikim ku em ê tenê karên SELECT bifikirin. Li vir peywirên DML an DDL tune.

erkên

Sînorkirin û Rêzkirina Daneyên

Tabloya karmendan. Lîsteyek bi agahdariya hemî karmendan bistînin
biryar

SELECT * FROM employees

Tabloya karmendan. Lîsteya hemî karmendên bi navê 'David' bistînin
biryar

SELECT *
  FROM employees
 WHERE first_name = 'David';

Tabloya karmendan. Lîsteya hemî xebatkarên bi job_id wekhev 'IT_PROG' bistînin
biryar

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

Tabloya karmendan. Lîsteya hemî karmendên ji beşa 50-an (department_id) bi meaş (meaş) ji 4000 mezintir bistînin.
biryar

SELECT *
  FROM employees
 WHERE department_id = 50 AND salary > 4000;

Tabloya karmendan. Lîsteya hemî xebatkarên ji beşa 20-an û 30-an bistînin (department_id)
biryar

SELECT *
  FROM employees
 WHERE department_id = 20 OR department_id = 30;

Tabloya karmendan. Lîsteya hemî xebatkarên ku tîpa paşîn a navê wan 'a' ye bistînin
biryar

SELECT *
  FROM employees
 WHERE first_name LIKE '%a';

Tabloya karmendan. Lîsteya hemî karmendên ji beşa 50-emîn û 80-an (department_id) yên ku bonusek wan heye bistînin (nirxa di stûna komîsyon_pct de ne vala ye)
biryar

SELECT *
  FROM employees
 WHERE     (department_id = 50 OR department_id = 80)
       AND commission_pct IS NOT NULL;

Tabloya karmendan. Lîsteya hemî karmendên ku navên wan herî kêm 2 tîpên 'n' hene bistînin
biryar

SELECT *
  FROM employees
 WHERE first_name LIKE '%n%n%';

Tabloya karmendan. Lîsteya hemî karmendên ku navên wan ji 4 tîpan dirêjtir in bistînin
biryar

SELECT *
  FROM employees
 WHERE first_name LIKE '%_____%';

Tabloya karmendan. Navnîşek hemî karmendên ku meaşê wan di navbera 8000 û 9000 de ye (tevlî) bistînin
biryar

SELECT *
  FROM employees
 WHERE salary BETWEEN 8000 AND 9000;

Tabloya karmendan. Lîsteya hemî karmendên ku navê wan sembola '%' heye bigire
biryar

SELECT *
  FROM employees
 WHERE first_name LIKE '%%%' ESCAPE '';

Tabloya karmendan. Navnîşek hemî nasnameyên rêveberê bistînin
biryar

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

Tabloya karmendan. Navnîşek karmendan bi pozîsyonên wan re bi formê bistînin: Donald(sh_clerk)
biryar

SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;

Bikaranîna Fonksiyonên Yek-Rew ji bo Xweserkirina Hilberê

Tabloya karmendan. Lîsteya hemî karmendên ku navên wan ji 10 tîpan dirêjtir in bistînin
biryar

SELECT *
  FROM employees
 WHERE LENGTH (first_name) > 10;

Tabloya karmendan. Lîsteya hemî xebatkarên ku di navê wan de tîpa 'b' heye (nehessasiyeta mezin) bistînin
biryar

SELECT *
  FROM employees
 WHERE INSTR (LOWER (first_name), 'b') > 0;

Tabloya karmendan. Lîsteya hemî xebatkarên ku navên wan herî kêm 2 tîpên 'a' hene bistînin.
biryar

SELECT *
  FROM employees
 WHERE INSTR (LOWER (first_name),'a',1,2) > 0;

Tabloya karmendan. Navnîşek hemî karmendên ku meaşê wan ji 1000-ê pirjimar e bistînin
biryar

SELECT *
  FROM employees
 WHERE MOD (salary, 1000) = 0;

Tabloya karmendan. Ger hejmara wî di forma XXX.XXX.XX de be, hejmara 3-hejmar a yekem a jimareya têlefonê ya karmendek bistînin.
biryar

SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
  FROM employees
 WHERE phone_number LIKE '___.___.____';

Dezgehên sifrê. Ji bo kesên ku di nav de ji yek peyvan zêdetir hene peyva yekem ji navê beşê bistînin
biryar

SELECT department_name,
       SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
           first_word
  FROM departments
 WHERE INSTR (department_name, ' ') > 0;

Tabloya karmendan. Navên karmendan bêyî tîpa yekem û paşîn di nav de bistînin
biryar

SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
  FROM employees;

Tabloya karmendan. Lîsteya hemû xebatkarên ku tîpa wan a dawîn a navê wan 'm' e û navê wan ji 5'an dirêjtir e, bistînin
biryar

SELECT *
  FROM employees
 WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;

Table Dual. Roja Înê ya din bistînin
biryar

SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;

Tabloya karmendan. Lîsteya hemî karmendên ku ji 17 salan zêdetir ji bo pargîdaniyê xebitîne bistînin
biryar

SELECT *
  FROM employees
 WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;

Tabloya karmendan. Lîsteya hemî xebatkarên ku hêjmara wan a paşîn a têlefona wan xerîb e û ji 3 hejmarên ku bi xalekê veqetandî pêk tê bistînin.
biryar

SELECT *
  FROM employees
 WHERE     MOD (SUBSTR (phone_number, -1), 2) != 0
       AND INSTR (phone_number,'.',1,3) = 0;

Tabloya karmendan. Lîsteya hemî xebatkarên ku nirxa job_id piştî nîşana '_' bi kêmî ve 3 tîpan hene, lê ev nirxa piştî '_'yê ne bi 'CLERK' re ye.
biryar

SELECT *
  FROM employees
 WHERE     LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
       AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';

Tabloya karmendan. Bi guheztina hemî '.' di nirxa PHONE_NUMBER de navnîşek hemî karmendan bistînin li ser '-'
biryar

SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
  FROM employees;

Bikaranîna Fonksiyonên Veguheztinê û Bilêvkirinên Şertkirî

Tabloya karmendan. Lîsteya hemî xebatkarên ku di roja yekem a mehê de hatine ser kar bistînin (her)
biryar

SELECT *
  FROM employees
 WHERE TO_CHAR (hire_date, 'DD') = '01';

Tabloya karmendan. Lîsteya hemî karmendên ku di 2008 de hatine ser kar bistînin
biryar

SELECT *
  FROM employees
 WHERE TO_CHAR (hire_date, 'YYYY') = '2008';

Table DUAL. Dîroka sibe bi şeklê nîşan bide: Sibe roja duyemîn a Çile ye
biryar

SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month')     info
  FROM DUAL;

Tabloya karmendan. Lîsteya hemî karmendan û tarîxa ku her karmendek gihîştiye kar bi formê bistînin: 21-ê Hezîran, 2007
biryar

SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
  FROM employees;

Tabloya karmendan. Lîsteya xebatkarên ku mûçeyên wan ji sedî 20 zêde bûne bistînin. Meaş bi nîşana dolarê nîşan bide
biryar

SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
  FROM employees;

Tabloya karmendan. Lîsteya hemî karmendên ku di Sibata 2007 de dest bi kar kirine bistînin.
biryar

SELECT *
  FROM employees
 WHERE hire_date BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY')
                     AND LAST_DAY (TO_DATE ('01.02.2007', 'DD.MM.YYYY'));

SELECT *
  FROM employees
 WHERE to_char(hire_date,'MM.YYYY') = '02.2007'; 

Table DUAL. Dîroka heyî, + duyemîn, + deqîqe, + saet, + roj, + meh, + sal derxe
biryar

SELECT SYSDATE                          now,
       SYSDATE + 1 / (24 * 60 * 60)     plus_second,
       SYSDATE + 1 / (24 * 60)          plus_minute,
       SYSDATE + 1 / 24                 plus_hour,
       SYSDATE + 1                      plus_day,
       ADD_MONTHS (SYSDATE, 1)          plus_month,
       ADD_MONTHS (SYSDATE, 12)         plus_year
  FROM DUAL;

Tabloya karmendan. Navnîşek hemî karmendên bi mûçeyên tam (meaş + komîsyon_pct (%)) bi formê bistînin: 24,000.00 $
biryar

SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
  FROM employees;

Tabloya karmendan. Lîsteya hemî karmendan û agahdariya li ser hebûna bonusên meaş bistînin (Erê / Na)
biryar

SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
  FROM employees;

Tabloya karmendan. Asta meaşê her karmendek bistînin: Kêmtir ji 5000 kêm tê hesibandin, ji 5000 mezintir an wekhev û kêmtir ji 10000 asta normal tê hesibandin, ji 10000 zêdetir an wekhev tê asta bilind.
biryar

SELECT first_name,
       salary,
       CASE
           WHEN salary < 5000 THEN 'Low'
           WHEN salary >= 5000 AND salary < 10000 THEN 'Normal'
           ELSE 'High'
       END salary_level
  FROM employees;

Welatên Table. Ji bo her welatekî, herêma ku lê ye nîşan bide: 1-Ewropa, 2-Amerîka, 3-Asya, 4-Efrîqa (bê Tevlêbûn)
biryar

SELECT country_name country,
       DECODE (region_id,
               1, 'Europe',
               2, 'America',
               3, 'Asia',
               4, 'Africa',
               'Unknown')
           region
  FROM countries;

SELECT country_name
           country,
       CASE region_id
           WHEN 1 THEN 'Europe'
           WHEN 2 THEN 'America'
           WHEN 3 THEN 'Asia'
           WHEN 4 THEN 'Africa'
           ELSE 'Unknown'
       END
           region
  FROM countries;

Raporkirina Daneyên Berhevkirî Bi Bikaranîna Fonksiyonên Komê

Tabloya karmendan. Raporek ji hêla beşa_id ve bi mûçeya herî kêm û herî zêde, rojên zû û dereng hatina ser kar û hejmara karmendan bistînin. Li gorî hejmara karmendan rêz bikin (jêr daketî)
biryar

  SELECT department_id,
         MIN (salary) min_salary,
         MAX (salary) max_salary,
         MIN (hire_date) min_hire_date,
         MAX (hire_date) max_hire_Date,
         COUNT (*) count
    FROM employees
GROUP BY department_id
order by count(*) desc;

Tabloya karmendan. Çend xebatkarên ku navên wan bi heman herfê dest pê dikin? Li gorî mîqdarê rêz bikin. Tenê yên ku hêjmar ji 1-ê mezintir e nîşan bidin
biryar

SELECT SUBSTR (first_name, 1, 1) first_char, COUNT (*)
    FROM employees
GROUP BY SUBSTR (first_name, 1, 1)
  HAVING COUNT (*) > 1
ORDER BY 2 DESC;

Tabloya karmendan. Çend karmend di heman beşê de dixebitin û heman meaş distînin?
biryar

SELECT department_id, salary, COUNT (*)
    FROM employees
GROUP BY department_id, salary
  HAVING COUNT (*) > 1;

Tabloya karmendan. Raporek bistînin ka çend karmend di her rojên hefteyê de hatine girtin. Li gorî mîqdarê rêz bikin
biryar

SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
    FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;

Tabloya karmendan. Raporek li ser çend karmendan bi salê bistînin. Li gorî mîqdarê rêz bikin
biryar

SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
    FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');

Tabloya karmendan. Hejmara beşên ku karmend hene bistînin
biryar

SELECT COUNT (COUNT (*))     department_count
    FROM employees
   WHERE department_id IS NOT NULL
GROUP BY department_id;

Tabloya karmendan. Navnîşek dezgehên_idên ku ji 30 zêdetir karmend hene bistînin
biryar

  SELECT department_id
    FROM employees
GROUP BY department_id
  HAVING COUNT (*) > 30;

Tabloya karmendan. Navnîşek beşa_ids û meaşê navînî yê karmendan li her beşê bistînin.
biryar

  SELECT department_id, ROUND (AVG (salary)) avg_salary
    FROM employees
GROUP BY department_id;

Welatên Table. Lîsteya herêmê_id berhevoka hemî herfên navên_welatên ku ji 60î zêdetir in bistînin
biryar

  SELECT region_id
    FROM countries
GROUP BY region_id
  HAVING SUM (LENGTH (country_name)) > 60;

Tabloya karmendan. Lîsteya dezgeh_id-ên ku karmendên çend (> 1) job_id tê de dixebitin bistînin
biryar

  SELECT department_id
    FROM employees
GROUP BY department_id
  HAVING COUNT (DISTINCT job_id) > 1;

Tabloya karmendan. Lîsteya rêveber_idên ku jimara bindestên wan ji 5an mezintir e û berhevoka hemî mûçeyên bindestên wî ji 50000 mezintir e bistînin.
biryar

  SELECT manager_id
    FROM employees
GROUP BY manager_id
  HAVING COUNT (*) > 5 AND SUM (salary) > 50000;

Tabloya karmendan. Navnîşek manager_idên ku meaşê navînî yên hemî bindestên wî di navbera 6000 heya 9000 de ye û bonusan wernagirin bistînin (komîsyon_pct vala ye)
biryar

  SELECT manager_id, AVG (salary) avg_salary
    FROM employees
   WHERE commission_pct IS NULL
GROUP BY manager_id
  HAVING AVG (salary) BETWEEN 6000 AND 9000;

Tabloya karmendan. Ji hemî karmendan mûçeya herî zêde bistînin job_id ku bi peyva 'CLERK' bi dawî dibe
biryar

SELECT MAX (salary) max_salary
  FROM employees
 WHERE job_id LIKE '%CLERK';

SELECT MAX (salary) max_salary
  FROM employees
 WHERE SUBSTR (job_id, -5) = 'CLERK';

Tabloya karmendan. Di nav hemî mûçeyên navîn de ji bo beşê mûçeya herî zêde bistînin
biryar

  SELECT MAX (AVG (salary))
    FROM employees
GROUP BY department_id;

Tabloya karmendan. Hejmara karmendan bi heman hejmara tîpan di navê wan de bistînin. Di heman demê de, tenê yên ku dirêjahiya navên wan ji 5an zêdetir e û hejmara xebatkarên bi heman navî ji 20an zêdetir e nîşan bide. Li gorî dirêjahiya navan rêz bikin
biryar

  SELECT LENGTH (first_name), COUNT (*)
    FROM employees
GROUP BY LENGTH (first_name)
  HAVING LENGTH (first_name) > 5 AND COUNT (*) > 20
ORDER BY LENGTH (first_name);

  SELECT LENGTH (first_name), COUNT (*)
    FROM employees
   WHERE LENGTH (first_name) > 5
GROUP BY LENGTH (first_name)
  HAVING COUNT (*) > 20
ORDER BY LENGTH (first_name);

Nîşandana Daneyên ji Gelek Tabloyên Bi Bikaranîna Tevlîbûnê

Karmendên Table, Dezgeh, Cih, Welat, Herêm. Li her herêmê navnîşek herêman û hejmara karmendan bistînin
biryar

  SELECT region_name, COUNT (*)
    FROM employees e
         JOIN departments d ON (e.department_id = d.department_id)
         JOIN locations l ON (d.location_id = l.location_id)
         JOIN countries c ON (l.country_id = c.country_id)
         JOIN regions r ON (c.region_id = r.region_id)
GROUP BY region_name;

Karmendên Table, Dezgeh, Cih, Welat, Herêm. Li ser her karmendek agahdariya berfireh bistînin:
Nav, Paşnav, Dezgeh, Kar, Kolan, Welat, Herêm
biryar

SELECT First_name,
       Last_name,
       Department_name,
       Job_id,
       street_address,
       Country_name,
       Region_name
  FROM employees  e
       JOIN departments d ON (e.department_id = d.department_id)
       JOIN locations l ON (d.location_id = l.location_id)
       JOIN countries c ON (l.country_id = c.country_id)
       JOIN regions r ON (c.region_id = r.region_id);

Tabloya karmendan. Hemî rêvebirên ku ji 6 zêdetir xebatkarên wan ên bindest in nîşan bidin
biryar

  SELECT man.first_name, COUNT (*)
    FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
GROUP BY man.first_name
  HAVING COUNT (*) > 6;

Tabloya karmendan. Hemî xebatkarên ku ji kesî re rapor nakin nîşan bidin
biryar

SELECT emp.first_name
  FROM employees  emp
       LEFT JOIN employees man ON (emp.manager_id = man.employee_id)
 WHERE man.FIRST_NAME IS NULL;

SELECT first_name
  FROM employees
 WHERE manager_id IS NULL;

Karmendên Table, Job_history. Tabloya Karmend hemî karmendan diparêze. Tabloya Job_history karmendên ku ji pargîdaniyê derketine diparêze. Raporek li ser hemî karmendan û rewşa wan a di pargîdaniyê de bistînin (Bi dîroka derketinê re kar dike an ji pargîdaniyê derket)
Nimûne:
yekem_nav | cî
Jennifer | Di 31ê Kanûna Pêşîn, 2006 de ji pargîdaniyê derket
Clara | Niha dixebite
biryar

SELECT first_name,
       NVL2 (
           end_date,
           TO_CHAR (end_date, 'fm""Left the company at"" DD ""of"" Month, YYYY'),
           'Currently Working')
           status
  FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);

Karmendên Table, Dezgeh, Cih, Welat, Herêm. Lîsteya xebatkarên ku li Ewropayê dijîn bistînin (navê_herêmê)
biryar

 SELECT first_name
  FROM employees
       JOIN departments USING (department_id)
       JOIN locations USING (location_id)
       JOIN countries USING (country_id)
       JOIN regions USING (region_id)
 WHERE region_name = 'Europe';
 
 SELECT first_name
  FROM employees  e
       JOIN departments d ON (e.department_id = d.department_id)
       JOIN locations l ON (d.location_id = l.location_id)
       JOIN countries c ON (l.country_id = c.country_id)
       JOIN regions r ON (c.region_id = r.region_id)
 WHERE region_name = 'Europe';

Karmendên Table, Dezgehên. Hemî beşên ku ji 30 zêdetir karmend in nîşan bidin
biryar

SELECT department_name, COUNT (*)
    FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
  HAVING COUNT (*) > 30;

Karmendên Table, Dezgehên. Hemî xebatkarên ku di tu beşê de ne nîşan bidin
biryar

SELECT first_name
  FROM employees  e
       LEFT JOIN departments d ON (e.department_id = d.department_id)
 WHERE d.department_name IS NULL;

SELECT first_name
  FROM employees
 WHERE department_id IS NULL;

Karmendên Table, Dezgehên. Hemî beşên ku tê de karmend nîn in nîşan bidin
biryar

SELECT department_name
  FROM employees  e
       RIGHT JOIN departments d ON (e.department_id = d.department_id)
 WHERE first_name IS NULL;

Tabloya karmendan. Hemî xebatkarên ku kesek jêrdestê wan nîne nîşan bidin
biryar

SELECT man.first_name
  FROM employees  emp
       RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
 WHERE emp.FIRST_NAME IS NULL;

Karmendên Table, Kar, Dezgehên. Karmendan di formê de nîşan bide: Navê_Navê, Sernav_kar, Navê_Wezaretê.
Nimûne:
Navê_Navê | Sernav_kar | Dezgeha_name
Donald | Shipping | Clerk Shipping
biryar

SELECT first_name, job_title, department_name
  FROM employees  e
       JOIN jobs j ON (e.job_id = j.job_id)
       JOIN departments d ON (d.department_id = e.department_id);

Tabloya karmendan. Lîsteya xebatkarên ku rêvebirên wan di sala 2005-an de kar girtine bistînin, lê di heman demê de van karmendan bi xwe beriya 2005-an kar girtine.
biryar

SELECT emp.*
  FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id)
 WHERE     TO_CHAR (man.hire_date, 'YYYY') = '2005'
       AND emp.hire_date < TO_DATE ('01012005', 'DDMMYYYY');

Tabloya karmendan. Lîsteya xebatkarên ku rêvebirên wan di meha Çile ya her salê de kar girtine bistînin û dirêjahiya sernav_kar a van karmendan ji 15 tîpan zêdetir e.
biryar

SELECT emp.*
  FROM employees  emp
       JOIN employees man ON (emp.manager_id = man.employee_id)
       JOIN jobs j ON (emp.job_id = j.job_id)
 WHERE TO_CHAR (man.hire_date, 'MM') = '01' AND LENGTH (j.job_title) > 15;

Ji bo Çareserkirina Pirsên Binpirsiyan Bikaranîn

Tabloya karmendan. Lîsteya xebatkarên bi navê herî dirêj bistînin.
biryar

SELECT *
  FROM employees
 WHERE LENGTH (first_name) =
       (SELECT MAX (LENGTH (first_name)) FROM employees);

Tabloya karmendan. Navnîşek xebatkarên bi meaş ji mûçeya navîn a hemî karmendan mezintir bistînin.
biryar

SELECT *
  FROM employees
 WHERE salary > (SELECT AVG (salary) FROM employees);

Karmend, Dezgeh, Tabloya Cihan. Bajarê ku tê de karmend bi tevahî kêmtirîn qezenc dikin bistînin.
biryar

SELECT city
    FROM employees e
         JOIN departments d ON (e.department_id = d.department_id)
         JOIN locations l ON (d.location_id = l.location_id)
GROUP BY city
  HAVING SUM (salary) =
         (  SELECT MIN (SUM (salary))
              FROM employees e
                   JOIN departments d ON (e.department_id = d.department_id)
                   JOIN locations l ON (d.location_id = l.location_id)
          GROUP BY city);

Tabloya karmendan. Navnîşek karmendên ku rêveberê wan ji 15000 zêdetir meaş distîne bistînin.
biryar

SELECT *
  FROM employees
 WHERE manager_id IN (SELECT employee_id
                        FROM employees
                       WHERE salary > 15000)

Karmendên Table, Dezgehên. Hemî beşên ku tê de karmend nîn in nîşan bidin
biryar

SELECT *
  FROM departments
 WHERE department_id NOT IN (SELECT department_id
                               FROM employees
                              WHERE department_id IS NOT NULL);

Tabloya karmendan. Hemî karmendên ku ne rêveber in nîşan bidin
biryar

SELECT *
  FROM employees
 WHERE employee_id NOT IN (SELECT manager_id
                             FROM employees
                            WHERE manager_id IS NOT NULL)

Tabloya karmendan. Hemî rêvebirên ku ji 6 zêdetir xebatkarên wan ên bindest in nîşan bidin
biryar

SELECT *
  FROM employees e
 WHERE (SELECT COUNT (*)
          FROM employees
         WHERE manager_id = e.employee_id) > 6;

Karmendên Table, Dezgehên. Karmendên ku di beşa IT-ê de dixebitin nîşan bidin
biryar

SELECT *
  FROM employees
 WHERE department_id = (SELECT department_id
                          FROM departments
                         WHERE department_name = 'IT');

Karmendên Table, Kar, Dezgehên. Karmendan di formê de nîşan bide: Navê_Navê, Sernav_kar, Navê_Wezaretê.
Nimûne:
Navê_Navê | Sernav_kar | Dezgeha_name
Donald | Shipping | Clerk Shipping
biryar

SELECT first_name,
       (SELECT job_title
          FROM jobs
         WHERE job_id = e.job_id)
           job_title,
       (SELECT department_name
          FROM departments
         WHERE department_id = e.department_id)
           department_name
  FROM employees e;

Tabloya karmendan. Lîsteya xebatkarên ku rêvebirên wan di sala 2005-an de kar girtine bistînin, lê di heman demê de van karmendan bi xwe beriya 2005-an kar girtine.
biryar

SELECT *
  FROM employees
 WHERE     manager_id IN (SELECT employee_id
                            FROM employees
                           WHERE TO_CHAR (hire_date, 'YYYY') = '2005')
       AND hire_date < TO_DATE ('01012005', 'DDMMYYYY');

Tabloya karmendan. Lîsteya xebatkarên ku rêvebirên wan di meha Çile ya her salê de kar girtine bistînin û dirêjahiya sernav_kar a van karmendan ji 15 tîpan zêdetir e.
biryar

SELECT *
  FROM employees e
 WHERE     manager_id IN (SELECT employee_id
                            FROM employees
                           WHERE TO_CHAR (hire_date, 'MM') = '01')
       AND (SELECT LENGTH (job_title)
              FROM jobs
             WHERE job_id = e.job_id) > 15;

Ji bo niha ev hemû.

Ez hêvî dikim ku kar balkêş û balkêş bûn.
Ez ê bi qasî ku gengaz be li vê navnîşa karan zêde bikim.
Ez ê jî kêfxweş bibim ku her şîrove û pêşniyaran werbigirim.

PS: Ger kesek bi karekî SELECT balkêş derkeve, di şîroveyan de binivîsîne û ez ê wê li navnîşê zêde bikim.

Sipî

Source: www.habr.com

Add a comment