Примеры sql запросов к базе данных mysql
Содержание:
Команда WHERE
Команда WHERE предназначена для создания условий (фильтров).
WHERE используется тогда, когда нужно вывести только те строки, которые соответствуют одному или нескольким условиям.
WHERE похожа на условный оператор if , который используется во многих языках программирования для создания условий.
WHERE применяется только совместно с командами SELECT , UPDATE и DELETE .
Синтаксис команды WHERE
Рассмотрим несколько примеров создания условий.
Выведем все книги, которые написал Лев Толстой.
Выведем все книги, доступное количество которых равно трём.
mysql> SELECT >FROM books WHERE amount=3; +—-+—————————+———————+———+———+ | id | title | author | price | amount | +—-+—————————+———————+———+———+ | 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 | 3 | | 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 3 | | 8 | Отцы и дети | Иван Тургенев | 371.00 | 3 | +—-+—————————+———————+———+———+ 3 rows in set (0.00 sec)
Фильтрация записей с помощью условия WHERE
Следующая команда SQL возвращает всех сотрудников из таблицы сотрудников, чья зарплата превышает 6000. Ключевое слово WHERE просто отфильтровывает нежелательные данные.
SELECT * FROM employees WHERE salary > 6000;
После выполнения этой команды, вы получите записи только тех сотрудников, заработная плата которых больше 6000.
Так же, мы можем изменять количество выводимых столбцов, указывая их в запросе. Давайте выведем сотрудников в таблицу содержащую только их айди, имена и заработные платы.
SELECT emp_id, emp_name, salary FROM employees WHERE salary > 6000;
В результате вы получите таблицу состоящую из указаных выше столбцов:
+--------+--------------+--------+ | emp_id | emp_name | salary | +--------+--------------+--------+ | 1 | Vasya Pupkin | 5000 | | 2 | Vanya Pupkin | 6500 | | 3 | Petya Pupkin | 8000 | +--------+--------------+--------+
В обоих примерах мы использовали оператор «больше чем». Однако, вы можете менять операторы в зависимости от результатов, которые хотите получить. Давайте рассмотрим подробнее, какие операторы можно использовать с ключевым словом WHERE.
Конструкция IF-THEN-ELSE
Конструкция применяется при выборе одного из двух взаимоисключающих действий. Формат этой версии команды :
Здесь условие — это логическая переменная, константа или логическое выражение. Если его значение равно , то выполняются команды, расположенные между ключевыми словами и , а если или — команды между ключевыми словами и.
Важно помнить, что в конструкции всегда выполняется одна из двух возможных последовательностей команд. После выполнения соответствующей последовательности управление передается команде, которая расположена сразу после ключевых слов
Следующая конструкция расширяет пример , приведенный в предыдущем разделе:
в этом примере сотрудники с окладом более 40 000 получат премию в 500, а остальным премия не назначается. Или все же назначается? Что произойдет, если у сотрудника по какой-либо причине оклад окажется равным ? В этом случае будут выполнены команды, следующие за ключевым словом , и работник получит премию, положенную только высокооплачиваемому составу. Поскольку мы не можем быть уверены в том, что оклад ни при каких условиях не окажется равным , нужно защититься от подобных проблем при помощи функции :
Функция возвращает нуль, если переменная равна . Это гарантирует, что работникам с окладом будет начислена нулевая премия (не позавидуешь!).
ЛОГИЧЕСКИЕ ФЛАГИ
Логические переменные удобно использовать в качестве флагов, чтобы одно и то же логическое выражение не приходилось вычислять по нескольку раз. Помните, что результат такого выражения можно присвоить логической переменной. Например, вместо
можно воспользоваться следующим, гораздо более простым выражением (при условии, что ни одна из переменных не равна ):
Теперь если где-либо в программном коде потребуется проверить, не превышает ли сумма заказа () максимально допустимое значение (), достаточно простой и понятной конструкции :
Если вам еще не приходилось работать с логическими переменными, возможно, на освоение этих приемов уйдет некоторое время. Но затраты окупятся сполна, поскольку в результате вы получите более простой и понятный код.
MySQL IF-THEN-ELSEIF-ELSE statement
If you want to execute statements conditionally based on multiple conditions, you use the following statement:
In this syntax, if the evaluates to , the in the branch executes; otherwise, the next is evaluated.
If the evaluates to , the executes; otherwise, the next is evaluated.
The statement can have multiple branches.
If no condition in the and evaluates to , the in the branch will execute.
We will modify the stored procedure to use the statement.
First, drop the stored procedure:
Then, create the new stored procedure that uses the the statement.
In this stored procedure:
- If the credit is greater than , the level of the customer is .
- If the credit is less than or equal and greater than , then the level of customer is .
- Otherwise, the level of the customer is .
These statements call the stored procedure and show the level of the customer :
If you test the stored procedure with the customer that has a credit limit of 10000 or less, you will get the output as .
In this tutorial, you have learned how to use MySQL statement to conditionally execute a block of code based on specified conditions.
- Was this tutorial helpful?
SQL References
SQL Keywords
  ADD
  ADD CONSTRAINT
  ALTER
  ALTER COLUMN
  ALTER TABLE
  ALL
  AND
  ANY
  AS
  ASC
  BACKUP DATABASE
  BETWEEN
  CASE
  CHECK
  COLUMN
  CONSTRAINT
  CREATE
  CREATE DATABASE
  CREATE INDEX
  CREATE OR REPLACE VIEW
  CREATE TABLE
  CREATE PROCEDURE
  CREATE UNIQUE INDEX
  CREATE VIEW
  DATABASE
  DEFAULT
  DELETE
  DESC
  DISTINCT
  DROP
  DROP COLUMN
  DROP CONSTRAINT
  DROP DATABASE
  DROP DEFAULT
  DROP INDEX
  DROP TABLE
  DROP VIEW
  EXEC
  EXISTS
  FOREIGN KEY
  FROM
  FULL OUTER JOIN
  GROUP BY
  HAVING
  IN
  INDEX
  INNER JOIN
  INSERT INTO
  INSERT INTO SELECT
  IS NULL
  IS NOT NULL
  JOIN
  LEFT JOIN
  LIKE
  LIMIT
  NOT
  NOT NULL
  OR
  ORDER BY
  OUTER JOIN
  PRIMARY KEY
  PROCEDURE
  RIGHT JOIN
  ROWNUM
  SELECT
  SELECT DISTINCT
  SELECT INTO
  SELECT TOP
  SET
  TABLE
  TOP
  TRUNCATE TABLE
  UNION
  UNION ALL
  UNIQUE
  UPDATE
  VALUES
  VIEW
  WHERE
MySQL Functions
  String Functions
  ASCII
  CHAR_LENGTH
  CHARACTER_LENGTH
  CONCAT
  CONCAT_WS
  FIELD
  FIND_IN_SET
  FORMAT
  INSERT
  INSTR
  LCASE
  LEFT
  LENGTH
  LOCATE
  LOWER
  LPAD
  LTRIM
  MID
  POSITION
  REPEAT
  REPLACE
  REVERSE
  RIGHT
  RPAD
  RTRIM
  SPACE
  STRCMP
  SUBSTR
  SUBSTRING
  SUBSTRING_INDEX
  TRIM
  UCASE
  UPPER
Numeric Functions
  ABS
  ACOS
  ASIN
  ATAN
  ATAN2
  AVG
  CEIL
  CEILING
  COS
  COT
  COUNT
  DEGREES
  DIV
  EXP
  FLOOR
  GREATEST
  LEAST
  LN
  LOG
  LOG10
  LOG2
  MAX
  MIN
  MOD
  PI
  POW
  POWER
  RADIANS
  RAND
  ROUND
  SIGN
  SIN
  SQRT
  SUM
  TAN
  TRUNCATE
Date Functions
  ADDDATE
  ADDTIME
  CURDATE
  CURRENT_DATE
  CURRENT_TIME
  CURRENT_TIMESTAMP
  CURTIME
  DATE
  DATEDIFF
  DATE_ADD
  DATE_FORMAT
  DATE_SUB
  DAY
  DAYNAME
  DAYOFMONTH
  DAYOFWEEK
  DAYOFYEAR
  EXTRACT
  FROM_DAYS
  HOUR
  LAST_DAY
  LOCALTIME
  LOCALTIMESTAMP
  MAKEDATE
  MAKETIME
  MICROSECOND
  MINUTE
  MONTH
  MONTHNAME
  NOW
  PERIOD_ADD
  PERIOD_DIFF
  QUARTER
  SECOND
  SEC_TO_TIME
  STR_TO_DATE
  SUBDATE
  SUBTIME
  SYSDATE
  TIME
  TIME_FORMAT
  TIME_TO_SEC
  TIMEDIFF
  TIMESTAMP
  TO_DAYS
  WEEK
  WEEKDAY
  WEEKOFYEAR
  YEAR
  YEARWEEK
Advanced Functions
  BIN
  BINARY
  CASE
  CAST
  COALESCE
  CONNECTION_ID
  CONV
  CONVERT
  CURRENT_USER
  DATABASE
  IF
  IFNULL
  ISNULL
  LAST_INSERT_ID
  NULLIF
  SESSION_USER
  SYSTEM_USER
  USER
  VERSION
SQL Server Functions
  String Functions
  ASCII
  CHAR
  CHARINDEX
  CONCAT
  Concat with +
  CONCAT_WS
  DATALENGTH
  DIFFERENCE
  FORMAT
  LEFT
  LEN
  LOWER
  LTRIM
  NCHAR
  PATINDEX
  QUOTENAME
  REPLACE
  REPLICATE
  REVERSE
  RIGHT
  RTRIM
  SOUNDEX
  SPACE
  STR
  STUFF
  SUBSTRING
  TRANSLATE
  TRIM
  UNICODE
  UPPER
Numeric Functions
  ABS
  ACOS
  ASIN
  ATAN
  ATN2
  AVG
  CEILING
  COUNT
  COS
  COT
  DEGREES
  EXP
  FLOOR
  LOG
  LOG10
  MAX
  MIN
  PI
  POWER
  RADIANS
  RAND
  ROUND
  SIGN
  SIN
  SQRT
  SQUARE
  SUM
  TAN
Date Functions
  CURRENT_TIMESTAMP
  DATEADD
  DATEDIFF
  DATEFROMPARTS
  DATENAME
  DATEPART
  DAY
  GETDATE
  GETUTCDATE
  ISDATE
  MONTH
  SYSDATETIME
  YEAR
Advanced Functions
  CAST
  COALESCE
  CONVERT
  CURRENT_USER
  IIF
  ISNULL
  ISNUMERIC
  NULLIF
  SESSION_USER
  SESSIONPROPERTY
  SYSTEM_USER
  USER_NAME
MS Access Functions
  String Functions
  Asc
  Chr
  Concat with &
  CurDir
  Format
  InStr
  InstrRev
  LCase
  Left
  Len
  LTrim
  Mid
  Replace
  Right
  RTrim
  Space
  Split
  Str
  StrComp
  StrConv
  StrReverse
  Trim
  UCase
Numeric Functions
  Abs
  Atn
  Avg
  Cos
  Count
  Exp
  Fix
  Format
  Int
  Max
  Min
  Randomize
  Rnd
  Round
  Sgn
  Sqr
  Sum
  Val
Date Functions
  Date
  DateAdd
  DateDiff
  DatePart
  DateSerial
  DateValue
  Day
  Format
  Hour
  Minute
  Month
  MonthName
  Now
  Second
  Time
  TimeSerial
  TimeValue
  Weekday
  WeekdayName
  Year
Other Functions
  CurrentUser
  Environ
  IsDate
  IsNull
  IsNumeric
SQL OperatorsSQL Data TypesSQL Quick Ref
MySQL 日期函数
| 函数名 | 描述 | 实例 | 
|---|---|---|
| ADDDATE(d,n) | 计算起始日期 d 加上 n 天的日期 | 
SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
->2017-06-25
 | 
| ADDTIME(t,n) | 时间 t 加上 n 秒的时间 | 
SELECT ADDTIME('2011-11-11 11:11:11', 5)
->2011-11-11 11:11:16 (秒)
 | 
| CURDATE() | 返回当前日期 | SELECT CURDATE(); -> 2018-09-19 | 
| CURRENT_DATE() | 返回当前日期 | SELECT CURRENT_DATE(); -> 2018-09-19 | 
| CURRENT_TIME | 返回当前时间 | SELECT CURRENT_TIME(); -> 19:59:02 | 
| CURRENT_TIMESTAMP() | 返回当前日期和时间 | SELECT CURRENT_TIMESTAMP() -> 2018-09-19 20:57:43 | 
| CURTIME() | 返回当前时间 | SELECT CURTIME(); -> 19:59:02 | 
| DATE() | 从日期或日期时间表达式中提取日期值 | 
SELECT DATE("2017-06-15");    
-> 2017-06-15
 | 
| DATEDIFF(d1,d2) | 计算日期 d1->d2 之间相隔的天数 | 
SELECT DATEDIFF('2001-01-01','2001-02-02')
-> -32
 | 
| DATE_ADD(d,INTERVAL expr type) | 计算起始日期 d 加上一个时间段后的日期 | 
SELECT ADDDATE('2011-11-11 11:11:11',1)
-> 2011-11-12 11:11:11    (默认是天)
SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE)
-> 2011-11-11 11:16:11 (TYPE的取值与上面那个列出来的函数类似)
 | 
| DATE_FORMAT(d,f) | 按表达式 f的要求显示日期 d | 
SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')
-> 2011-11-11 11:11:11 AM
 | 
| DATE_SUB(date,INTERVAL expr type) | 函数从日期减去指定的时间间隔。 | Orders 表中 OrderDate 字段减去 2 天: SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders | 
| DAY(d) | 返回日期值 d 的日期部分 | 
SELECT DAY("2017-06-15");  
-> 15
 | 
| DAYNAME(d) | 返回日期 d 是星期几,如 Monday,Tuesday | 
SELECT DAYNAME('2011-11-11 11:11:11')
->Friday
 | 
| DAYOFMONTH(d) | 计算日期 d 是本月的第几天 | 
SELECT DAYOFMONTH('2011-11-11 11:11:11')
->11
 | 
| DAYOFWEEK(d) | 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 | 
SELECT DAYOFWEEK('2011-11-11 11:11:11')
->6
 | 
| DAYOFYEAR(d) | 计算日期 d 是本年的第几天 | 
SELECT DAYOFYEAR('2011-11-11 11:11:11')
->315
 | 
| EXTRACT(type FROM d) | 从日期 d 中获取指定的值,type 指定返回的值。 type可取值为: 
 | SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11') -> 11 | 
| FROM_DAYS(n) | 计算从 0000 年 1 月 1 日开始 n 天后的日期 | SELECT FROM_DAYS(1111) -> 0003-01-16 | 
| HOUR(t) | 返回 t 中的小时值 | 
SELECT HOUR('1:2:3')
-> 1
 | 
| LAST_DAY(d) | 返回给给定日期的那一月份的最后一天 | 
SELECT LAST_DAY("2017-06-20");
-> 2017-06-30
 | 
| LOCALTIME() | 返回当前日期和时间 | SELECT LOCALTIME() -> 2018-09-19 20:57:43 | 
| LOCALTIMESTAMP() | 返回当前日期和时间 | SELECT LOCALTIMESTAMP() -> 2018-09-19 20:57:43 | 
| MAKEDATE(year, day-of-year) | 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期 | SELECT MAKEDATE(2017, 3); -> 2017-01-03 | 
| MAKETIME(hour, minute, second) | 组合时间,参数分别为小时、分钟、秒 | SELECT MAKETIME(11, 35, 4); -> 11:35:04 | 
| MICROSECOND(date) | 返回日期参数所对应的微秒数 | 
SELECT MICROSECOND("2017-06-20 09:34:00.000023");
-> 23
 | 
| MINUTE(t) | 返回 t 中的分钟值 | 
SELECT MINUTE('1:2:3')
-> 2
 | 
| MONTHNAME(d) | 返回日期当中的月份名称,如 November | 
SELECT MONTHNAME('2011-11-11 11:11:11')
-> November
 | 
| MONTH(d) | 返回日期d中的月份值,1 到 12 | 
SELECT MONTH('2011-11-11 11:11:11')
->11
 | 
| NOW() | 返回当前日期和时间 | SELECT NOW() -> 2018-09-19 20:57:43 | 
| PERIOD_ADD(period, number) | 为 年-月 组合日期添加一个时段 | SELECT PERIOD_ADD(201703, 5); -> 201708 | 
| PERIOD_DIFF(period1, period2) | 返回两个时段之间的月份差值 | SELECT PERIOD_DIFF(201710, 201703); -> 7 | 
| QUARTER(d) | 返回日期d是第几季节,返回 1 到 4 | 
SELECT QUARTER('2011-11-11 11:11:11')
-> 4
 | 
| SECOND(t) | 返回 t 中的秒钟值 | 
SELECT SECOND('1:2:3')
-> 3
 | 
| SEC_TO_TIME(s) | 将以秒为单位的时间 s 转换为时分秒的格式 | SELECT SEC_TO_TIME(4320) -> 01:12:00 | 
| STR_TO_DATE(string, format_mask) | 将字符串转变为日期 | 
SELECT STR_TO_DATE("August 10 2017", "%M %d %Y");
-> 2017-08-10
 | 
| SUBDATE(d,n) | 日期 d 减去 n 天后的日期 | 
SELECT SUBDATE('2011-11-11 11:11:11', 1)
->2011-11-10 11:11:11 (默认是天)
 | 
| SUBTIME(t,n) | 时间 t 减去 n 秒的时间 | 
SELECT SUBTIME('2011-11-11 11:11:11', 5)
->2011-11-11 11:11:06 (秒)
 | 
| SYSDATE() | 返回当前日期和时间 | SELECT SYSDATE() -> 2018-09-19 20:57:43 | 
| TIME(expression) | 提取传入表达式的时间部分 | 
SELECT TIME("19:30:10");
-> 19:30:10
 | 
| TIME_FORMAT(t,f) | 按表达式 f 的要求显示时间 t | 
SELECT TIME_FORMAT('11:11:11','%r')
11:11:11 AM
 | 
| TIME_TO_SEC(t) | 将时间 t 转换为秒 | 
SELECT TIME_TO_SEC('1:12:00')
-> 4320
 | 
| TIMEDIFF(time1, time2) | 计算时间差值 | 
SELECT TIMEDIFF("13:10:11", "13:10:10");
-> 00:00:01
 | 
| TIMESTAMP(expression, interval) | 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 | 
SELECT TIMESTAMP("2017-07-23",  "13:10:11");
-> 2017-07-23 13:10:11
 | 
| TO_DAYS(d) | 计算日期 d 距离 0000 年 1 月 1 日的天数 | 
SELECT TO_DAYS('0001-01-01 01:01:01')
-> 366
 | 
| WEEK(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | 
SELECT WEEK('2011-11-11 11:11:11')
-> 45
 | 
| WEEKDAY(d) | 日期 d 是星期几,0 表示星期一,1 表示星期二 | 
SELECT WEEKDAY("2017-06-15");
-> 3
 | 
| WEEKOFYEAR(d) | 计算日期 d 是本年的第几个星期,范围是 0 到 53 | 
SELECT WEEKOFYEAR('2011-11-11 11:11:11')
-> 45
 | 
| YEAR(d) | 返回年份 | 
SELECT YEAR("2017-06-15");
-> 2017
 | 
| YEARWEEK(date, mode) | 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 | 
SELECT YEARWEEK("2017-06-15");
-> 201724
 | 



 
							 
							 
							 
							 
							 
							 
							 
							 
							