SQL Oracle
SELECT
SELECT * from
DESCRIBE JOBS Name Null? Type ---------- -------- ------------ JOB_ID NOT NULL VARCHAR2(10) JOB_TITLE NOT NULL VARCHAR2(35) MIN_SALARY NUMBER(6) MAX_SALARY NUMBER(6)
DISTINCT
Выбор уникального значения командой DISTINCT из столбца в таблице
SELECT DISTINCT column(s) FROM table
При запуске команды с двумя стоблцами значения выведутся только при совпадении уникальных значение в обоих столбцах.
Было: 102 13.01.01 24.07.06 IT_PROG 60 101 21.09.97 27.10.01 AC_ACCOUNT 110 101 28.10.01 15.03.05 AC_MGR 110 201 17.02.04 19.12.07 MK_REP 20 114 24.03.06 31.12.07 ST_CLERK 50 122 01.01.07 31.12.07 ST_CLERK 50 200 17.09.95 17.06.01 AD_ASST 90 176 24.03.06 31.12.06 SA_REP 80 176 01.01.07 31.12.07 SA_MAN 80 200 01.07.02 31.12.06 AC_ACCOUNT 90
SELECT DISTINCT JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY; SA_REP 80 AC_MGR 110 AC_ACCOUNT 90 ST_CLERK 50 MK_REP 20 SA_MAN 80 AC_ACCOUNT 110 AD_ASST 90 IT_PROG 60
Как результат выведены уникальные значения по двум столбцам в совокупности.
CONCATINATION
SELECT LAST_NAME||' '||FIRST_NAME AS NAME FROM EMPLOYEES;
Объединит имя и фамилию и назовет столбец NAME
можно записывать и так: SELECT 'Моя фамилия '||LAST_NAME||' мое имя '||FIRST_NAME AS NAME FROM EMPLOYEES;
ALIAS
SELECT 'Моя фамилия '||LAST_NAME||' мое имя '||FIRST_NAME AS "Name 1" FROM EMPLOYEES;
ALIAS можеть писать в кавычках и без. Если в кавычках, то только в таких " ".
DELIMETER
SELECT q'<IT'S MY LIFE>'q FROM DUAL;
Также можно использовать две одинарных кавычки в словах IT'S - IT''S. Не двойные кавычки, а два раза одинарные.
WHERE
select first_name, last_name, salary from employees where salary>10000;
Также можно указывать текствовые значения, например:
....where last_name = 'King'
Можно сравнивать столбцы:
...where manager_id=employee_id
но в этом случае типы данных столбцов должны быть одинаковы.
BETWEEN, IN, NULL
between чаще используют для дат и чисел, хотя для текста также его можно использовать.
select last_name, salary from employees where salary between 10000 and 20000;
Операнд IN также применяется с чилами, текстами, датами. Он обозначает выведи информацию, которая находится в (in) перечисленном списке.
select first_name from employees where employee_id in (100,120,130); можно писать используя операнд or Например, ....where employee_id = 100 or employee_id=120 or..., т.е. множесто операндов or можно заменить операндом in.
LIKE
Like в основном употребляется с использованием специальных символов
select first_name||' '||last_name as name from employees where last_name like '%g';
ORDER BY
select last_name from employees order by last_name;
сортировка по имени столбца last_name
select last_name from employees order by salary;
select last_name,hire_date from employees where job_id = 'FI_ACCOUNT' order by hire_date;
показать last_name и hire_date из таблицы employees, где job_id равно указанному и отсортировать по hire_date.
select last_name, salary from employees order by salary DESC
ORDER BY можно применять к выражению, в том числе и к alias
select last_name, salary, salary/2 from employees order by salary/4 select last_name, salary, salary/2 reduced from employees order by reduced/4;
Если сортировка по нескольким столбцам, то можно указывать порядковый номер этого столбца.
select last_name, salary from employees order by 2 DESC
Сортировать также можно сразу по нескольким столбцам и сортировка будет происходить последовательно.
select job_id, last_name, salary from employees order by job_id, last_name,salary;
Сначала отсортирует по job_id, затем внутри этой сортировки отсортирует по last_name, а потом по зарплате.
COUNT
Считает строки. Синтаксис: select count(job_id) from employees;
Может быть вывод нескольких строк. Например: select count(commission_pct), count(job_id) from employees;
select count(job_id) from employees where first_name like 'A%'
SUM, AVG, MIN, MAX
select sum(salary) from employees where job_id='PU_MAN';
select avg(salary) from employees where job_id='FI_ACCOUNT';
select max(length(first_name)) from employees; select min(length(first_name)) from employees;
вывод размера самого маленького и самого большого имени
Результат: 2 и 11
GROUP BY
group_by - значит объедененны признаком, который указан в group by
select department_id, count(*) from employees group by department_id order by 1,2;
вывод будет количества строк по признаку department_id т.е. кол-во строк по каждому департменту.
HAVING
работает с группами, а не со столбцами
select department_id,count(*) from employees group by department_id having count(*)>30 and sum(salary)>300000
В данном случае будет произведен вывод департаментов, где количество людей, которые там работают больше 30 и сумма зарплат департамента больше 300 000. В этом коде хорошо видно, что, если применяется group by, то все умоминаемые столбцы будут относиться только и только к тому столбцу, который определяет group by.
Команда having применяется только с group by и имеет тот же смысл, что и where.
Из таблицы countries вывести все region_id, для которых сумма всех букв их стран больше 50ти.
Выведите информацию о job_id и округленную среднюю зарплату работников для каждого job_id.
Выведите информацию о department, job_id, максимальную и минимальную з/п для всех сочетаний department_id - job_id, где средняя з/п больше 10000.
Получить список manager_id, у которых средняя зарплата всех его подчиненных, не имеющих комиссионные, находится в промежутке от 6000 до 9000.
select manager_id from employees where commission_pct is not null group by manager_id having avg(salary) between 6000 and 9000;