По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Привет! В статье расскажем про сетевые порты, которые необходимо открыть на вашем фаерволе для корректного пользовательского доступа и работы оконечных устройств. В статье указаны дефолтные и порты, и, с точки зрения безопасности, мы рекомендуем их сменить на нестандартные.
Доступ администратора системы
Порт
Транспорт (UDP/TCP)
Назначение
Смена порта
Безопасность
Дополнительно
22
TCP
Подключение к SSH консоли
Может быть изменен только через Linux CLI
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Порт используется для SSH подключения к АТС извне
80 FreePBX2001 PBXact
TCP
Графический интерфейс по HTTP (не HTTPS)
Можно поменять через графический интерфейс по пути System Admin > Port Management
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Используется для пользовательского доступа к WEB - интерфейсу АТС
443
TCP
Графический интерфейс по HTTPS
Можно поменять через графический интерфейс по пути System Admin > Port Management
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Используется для пользовательского доступа к WEB - интерфейсу АТС. Использует SSL шифрование
Доступ для SIP/IAX устройств
Порт
Транспорт (UDP/TCP)
Назначение
Смена порта
Безопасность
Дополнительно
5060
UDP
Порт получения телефонной сигнализации модулем chan_PJSIP
Есть возможность изменить порт в рамках графического интерфейса АТС в модуле SIP Settings
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Стандартный порт для сигнализации модуля chan_PJSIP
5061
Порт получения защищенной телефонной сигнализации модулем chan_PJSIP
Есть возможность изменить порт в рамках графического интерфейса АТС в модуле SIP Settings
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Защищенный порт для сигнализации модуля chan_PJSIP
5160
UDP
Порт получения телефонной сигнализации модулем chan_SIP
Есть возможность изменить порт в рамках графического интерфейса АТС в модуле SIP Settings
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Стандартный порт для сигнализации модуля chan_SIP
5161
Порт получения защищенной телефонной сигнализации модулем chan_SIP
Есть возможность изменить порт в рамках графического интерфейса АТС в модуле SIP Settings
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Защищенный порт для сигнализации модуля chan_SIP
10000-20000
UDP
Получение RTP потока в рамках SIP сессии
Есть возможность изменить порт в рамках графического интерфейса АТС в модуле SIP Settings
Можно открывать данные диапазон и, зачастую, это является требование SIP - провайдеров (RTP трафик зачастую приходит с различных IP - адресов)ё
Порты, необходимые для голосовой составляющей телефонного звонка
4569
UDP
Работа протокола IAX
Есть возможность изменить порт в рамках графического интерфейса АТС в модуле SIP Settings
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Используется для транкового объединения серверов и оконечных устройств.
Доступ к UCP (User Control Panel)
Порт
Транспорт (UDP/TCP)
Назначение
Смена порта
Безопасность
Дополнительно
81
TCP
Графический интерфейс UCP по HTTP (не HTTPS)
Порт можно поменять через FreePBX в System Admin > Port Management
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие). Для удаленных пользователей используйте HTTPS
Порт доступа к пользовательской панели UCP
4443
TCP
Графический интерфейс UCP по HTTPS
Порт можно поменять через FreePBX в System Admin > Port Management
Можно оставлять открытым в сеть, так как трафик шифрован, а так же происходит аутентификация пользователей
Порт доступа к пользовательской панели UCP с помощью SSL шифрования
8088
TCP
Порт для WebRTC клиентов
Порт можно поменять через FreePBX в Advanced Settings > Asterisk Builtin mini-HTTP > HTTP Bind Port
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие). Для удаленных пользователей используйте HTTPS
Необходим для реализации WebRTC звонков через UCP (звонок через броузер)
8089
TCP
Порт для шифрования WebRTC клиентов
Порт можно поменять через FreePBX в Advanced Settings > Asterisk Builtin mini-HTTP > HTTPS Bind Port
Можно оставлять открытым в сеть, так как трафик шифрован, а так же происходит аутентификация пользователей
Необходим для реализации WebRTC звонков с шифрованием через UCP (звонок через броузер)
8001
TCP
Node Server - получение информации в реальном времени в рамках UCP
Порт можно поменять через FreePBX в Advanced Settings > UCP NodeJS Server > NodeJS Bind Port
Не рекомендуется оставлять порт открытым в публичную сеть (не вызывающую доверие)
Процесс отвечает за real - time активности: всплывающая информация, чаты и прочее
8003
TCP
Node Server (защищенные подключения)
Порт можно поменять через FreePBX в Advanced Settings > UCP NodeJS Server > NodeJS HTTPS Bind Port
Можно оставлять открытым в сеть, так как трафик шифрован, а так же происходит аутентификация пользователей
Процесс отвечает за real - time активности: всплывающая информация, чаты и прочее
Остальные порты зависят от ваших конкретных требований: наличие RMS компонента мониторинга, Zulu, функционала провижнинга (EPM) и прочие.
Что это вообще такое?
Docker Compose является инструментом для определения и запуска контейнерных приложений. С Compose вы получаете возможность настраивать службы используя файл YAML. С помощью одной команды Compose вы создаете и запускаете все службы в соответствии с вашей конфигурацией.
Установка начинается с создания каталога проекта:
$ mkdir composetest
$ cd composetest
Создайте файл под названием app.py и вставьте в него следующие данные:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.
'.format(count)
В нашем случае название хоста - redis, который использует порт 6379. Создайте файл под названием needs.txt в каталоге вашего проекта и вставьте его в:
flask
Redis
Теперь следует написать код для файла Dockerfile, содержащий все необходимые переменные для среды разработки.
В каталоге вашего проекта создайте файл с именем Dockerfile (файл будет определять среду приложения) и вставьте следующее содержимое:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
Определение сервисов осуществляется при создании файла с именем docker-compose.yml в каталоге вашего проекта со следующей информацией:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
На основании содержания файла происходит запуск двух сервисов: Web и Redis, а в дальнейшем вы можете вносить в этот файл различные БД и иную важную информацию.
C помощью команды Compose создайте ваше приложение, после чего из каталога проекта запустите приложение, запустив docker-compose. Вот так:
$ docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
redis_1 | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_1 | * Restarting with stat
redis_1 | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379.
redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
web_1 | * Debugger is active!
redis_1 | 1:M 17 Aug 22:11:10.483 # Server initialized
redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
web_1 | * Debugger PIN: 330-787-903
redis_1 | 1:M 17 Aug 22:11:10.483 * Ready to accept connections
Compose извлекает образ Redis, создавая образ для вашего приложения и запускает выбранные службы. В этом случае код копируется в образ во время сборки. Как вам такое?
Теперь попробуйте ввести http://localhost:5000/ в браузере, чтобы чекнуть запущенное приложение.
Если вы используете Docker для Linux, Docker Desktop для Mac или Docker Desktop для Windows, то теперь веб-приложение должно "смотреть" на порт 5000 на хосте Docker. Введите в своем веб-браузере адрес http://localhost:5000, чтобы увидеть сообщение Hello World. Если не сработает, вы также можете попробовать зайти на http://127.0.0.1:5000.
Если вы используете Docker Machine на Mac или Windows, используйте ip MACHINE_VM docker-machine для получения IP-адреса вашего хоста Docker. Затем откройте http://MACHINE_VM_IP:5000 в браузере.
Вы должны увидеть сообщение в своем браузере:
Hello World! I have been seen 1 times.
Переключитесь на другое окно терминала и введите docker image ls, чтобы вывести список локальных образов/контейнеров. Вывод на этом этапе должен показывать redis и web.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
composetest_web latest e2c21aa48cc1 4 minutes ago 93.8MB
python 3.4-alpine 84e6077c7ab6 7 days ago 82.5MB
redis alpine 9d8fa9aa0e5b 3 weeks ago 27.5MB
Важно: Вы можете просматривать запущенные контейнеры с помощью Docker Inspect Tag или ID
Запустите docker-compose из каталога вашего проекта во втором терминале, либо нажмите CTRL + C в исходном терминале, где приложение уже запущено и отредактируйте файл Compose.
Отредактируйте docker-compose.yml в каталоге вашего проекта для внесения той или иной правки в веб-службе
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
Новый ключ редактирует каталог проекта на хосте внутри контейнера, что позволяет изменять код без необходимости перестраивать весь образ. Ключ среды устанавливает переменную FLASK_ENV, которая сообщает о запуске в режиме разработки и перезагрузке кода при изменении. Важно: этот режим должен использоваться только при разработке.
В каталоге проекта введите docker-compose up, чтобы создать приложение с обновленным файлом Compose, и запустите его.
$ docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
…
Поскольку код приложения теперь добавляется в контейнер с помощью тома, вы можете вносить изменения в его код и мгновенно просматривать изменения без необходимости перестраивать образ.
Измените сообщение в app.py и сохраните его:
Hello from Docker!:
return 'Hello from Docker! I have been seen {} times.
'.format(count)
Обновите результат в вашем браузере (нажмите F5 или Ctrl + F5) . Приветствие должно быть обновлено, а счетчик должен увеличиваться.
Вы можете поэкспериментировать с другими командами. Если вы хотите запускать свои службы в фоновом режиме, вы можете сделать следующее:
docker-compose up and use docker-compose ps to see what is currently running:
$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------
composetest_redis_1 /usr/local/bin/run Up
composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
Команда docker-compose run позволяет вам применять одноразовые команды к вашим сервисов. Например, чтобы увидеть, какие переменные среды доступны для веб-службы:
$ docker-compose run web env
Выполните команду docker-compose –help, чтобы увидеть весь список доступных команд.
Если вы запустили Compose с помощью docker-compose up -d, то нужно будет остановить ваши службы после работы с ними, для этого поможет команда ниже:$ docker-compose stop
Если хотите полностью уничтожить контейнер, используйте команду down.
SQL расшифровывается как Structured Query Language, или структурированный язык запросов. Команды SQL – это инструкции, которые даются базе данных для выполнения задач, функций и запросов с данными.
SQL-командами можно пользоваться для поиска по базе данных и выполнения различных функций: создания и удаления таблиц, добавления данных в таблицы и их редактирования.
Ниже приведен список основных команд (их иногда называют операторами), которые необходимо знать при работе с SQL.
SELECT и FROM
SELECT в запросе определяет, какие столбцы данных отобразить в результатах. Кроме того, в SQL есть возможности отображать данные не из столбца таблицы.
В примере ниже показаны 3 столбца, взятые из таблицы студентов Student (через SELECT и FROM) и один вычисляемый столбец. В базе данных хранятся ID (studentID), имя (FirstName) и фамилия (LastName) студента. Мы можем объединить столбцы с именем и фамилией и создать вычисляемое поле с полным именем (FullName).
SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName
FROM student;
Вывод:
+-----------+-------------------+------------+------------------------+
| studentID | FirstName | LastName | FullName |
+-----------+-------------------+------------+------------------------+
| 1 | Monique | Davis | Monique Davis |
| 2 | Teri | Gutierrez | Teri Gutierrez |
| 3 | Spencer | Pautier | Spencer Pautier |
| 4 | Louis | Ramsey | Louis Ramsey |
| 5 | Alvin | Greene | Alvin Greene |
| 6 | Sophie | Freeman | Sophie Freeman |
| 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd |
| 8 | Donald D. | Chamberlin | Donald D. Chamberlin |
| 9 | Raymond F. | Boyce | Raymond F. Boyce |
+-----------+-------------------+------------+------------------------+
9 rows in set (0.00 sec)
CREATE TABLE
Название CREATE TABLE говорит само за себя – оператор создает таблицу. Вы можете задать название таблицы и настроить, какие столбцы будут присутствовать в таблице.
CREATE TABLE table_name (
column_1 datatype,
column_2 datatype,
column_3 datatype
);
ALTER TABLE
ALTER TABLE изменяет структуру таблицы. Вот так можно добавить столбец в базу данных:
ALTER TABLE table_name
ADD column_name datatype;
CHECK
CHECK ограничивает диапазон значений, которые можно добавить в столбец.
Когда вы настраиваете ограничение CHECK для отдельного столбца, оператор проверяет, что в этом столбце присутствуют строго определенные значения. Если же CHECK настраивается для таблицы, то он может ограничивать значения в отдельных столбцах на основании значений из других столбцов этой строки.
В следующем примере при создании таблицы Persons используется ограничение CHECK для столбца «Возраст» (Age). Таким образом проверяется, что в таблицу не попадают лица младше 18 лет.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
Следующий синтаксис используется для присвоения названия оператору CHECK и настройки CHECK для нескольких столбцов:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
WHERE (AND, OR, IN, BETWEEN и LIKE)
Оператор WHERE используется для ограничения количества возвращаемых строк.
Сначала, в качестве примере, мы покажем оператор SELECT и его результат без оператора WHERE. Затем добавим оператор WHERE, в котором используются сразу 5 из вышеуказанных квалификаторов.
SELECT studentID, FullName, sat_score, rcd_updated FROM student;
+-----------+------------------------+-----------+---------------------+
| studentID | FullName | sat_score | rcd_updated |
+-----------+------------------------+-----------+---------------------+
| 1 | Monique Davis | 400 | 2017-08-16 15:34:50 |
| 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 |
| 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 |
| 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 |
| 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 |
| 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 |
| 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 |
| 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 |
| 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 |
+-----------+------------------------+-----------+---------------------+
9 rows in set (0.00 sec)
Теперь повторим запрос SELECT, но ограничим возвращаемые строки оператором WHERE.
STUDENT studentID, FullName, sat_score, recordUpdated
FROM student
WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8)
AND
sat_score NOT IN (1000, 1400);
+-----------+----------------------+-----------+---------------------+
| studentID | FullName | sat_score | rcd_updated |
+-----------+----------------------+-----------+---------------------+
| 1 | Monique Davis | 400 | 2017-08-16 15:34:50 |
| 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 |
| 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 |
| 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 |
| 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 |
+-----------+----------------------+-----------+---------------------+
5 rows in set (0.00 sec)
UPDATE
Для обновления записи в таблице используется оператор UPDATE.
Условием WHERE можно уточнить, какие именно записи вы бы хотели обновить. Вы можете обновлять по одному или нескольким столбцам сразу. Синтаксис выглядит так:
UPDATE table_name
SET column1 = value1,
column2 = value2, ...
WHERE condition;
В примере ниже обновляется название записи (поле Name) с Id 4:
UPDATE Person
SET Name = “Elton John”
WHERE Id = 4;
Помимо этого, можно обновлять столбцы в таблице значениями из других таблиц. Чтобы получить данные из нескольких таблиц, воспользуйтесь оператором JOIN. Синтаксис выглядит так:
UPDATE table_name1
SET table_name1.column1 = table_name2.columnA
table_name1.column2 = table_name2.columnB
FROM table_name1
JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key
В примере ниже мы обновляем поле «Менеджер» (Manager) для всех записей:
UPDATE Person
SET Person.Manager = Department.Manager
FROM Person
JOIN Department ON Person.DepartmentID = Department.ID
GROUP BY
GROUP BY позволяет объединять строки и агрегировать данные.
Вот так выглядит синтаксис GROUP BY:
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;
HAVING
HAVING позволяет сортировать данные, которые собираются через GROUP BY. Таким образом, пользователю показывается лишь ограниченный набор записей.
Вот так выглядит синтаксис HAVING:
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > value;
AVG()
AVG, или среднее, вычисляет среднее значение числового столбца из набора строк, которые возвращает оператор SQL.
Вот так выглядит синтаксис:
SELECT groupingField, AVG(num_field)
FROM table1
GROUP BY groupingField
А вот пример этого оператора для таблицы Student:
SELECT studentID, FullName, AVG(sat_score)
FROM student
GROUP BY studentID, FullName;
AS
AS позволяет переименовать столбец или таблицу с помощью псевдонима.
SELECT user_only_num1 AS AgeOfServer, (user_only_num1 - warranty_period) AS NonWarrantyPeriod FROM server_table
И вот так будет выглядеть результат.
+-------------+------------------------+
| AgeOfServer | NonWarrantyPeriod |
+-------------+------------------------+
| 36 | 24 |
| 24 | 12 |
| 61 | 49 |
| 12 | 0 |
| 6 | -6 |
| 0 | -12 |
| 36 | 24 |
| 36 | 24 |
| 24 | 12 |
+-------------+------------------------+
Кроме того, через оператор AS вы можете задать название таблицы – так будет проще обращаться к ней в JOIN.
SELECT ord.product, ord.ord_number, ord.price, cust.cust_name, cust.cust_number FROM customer_table AS cust
JOIN order_table AS ord ON cust.cust_number = ord.cust_number
Результат выглядит так.
+-------------+------------+-----------+-----------------+--------------+
| product | ord_number | price | cust_name | cust_number |
+-------------+------------+-----------+-----------------+--------------+
| RAM | 12345 | 124 | John Smith | 20 |
| CPU | 12346 | 212 | Mia X | 22 |
| USB | 12347 | 49 | Elise Beth | 21 |
| Cable | 12348 | 0 | Paul Fort | 19 |
| Mouse | 12349 | 66 | Nats Back | 15 |
| Laptop | 12350 | 612 | Mel S | 36 |
| Keyboard| 12351 | 24 | George Z | 95 |
| Keyboard| 12352 | 24 | Ally B | 55 |
| Air | 12353 | 12 | Maria Trust | 11 |
+-------------+------------+-----------+-----------------+--------------+
ORDER BY
ORDER BY позволяет сортировать результирующий набор данных по одному или нескольким элементам в разделе SELECT. Ниже дан пример сортировки студентов по имени (FullName) в порядке убывания. Изначально используется стандартная сортировка по возрастанию (ASC), поэтому для сортировки в обратном порядке мы применяем DESC.
SELECT studentID, FullName, sat_score
FROM student
ORDER BY FullName DESC;
COUNT
COUNT вычисляет количество строк и возвращает результирующее значение в столбце.
Ниже приводятся возможные сценарии использования COUNT:
Подсчет всех строк в таблице (не требуется Group by)
Подсчет общего числа подмножеств данных (в операторе обязательно прописывается Group By)
Этот оператор SQL выводит количество всех строк. Кроме того, что вы можете настроить название результирующего столбца COUNT с помощью AS.
SELECT count(*) AS studentCount FROM student;
DELETE
DELETE используется для удаления записи из таблицы.
Будьте внимательны! Вы можете удалить несколько записей в таблице, либо сразу все. С помощью условия WHERE вы указываете, какие записи необходимо удалить. Синтаксис выглядит так:
DELETE FROM table_name
WHERE condition;
Вот так выглядит удаление из таблицы Person записи с Id 3:
DELETE FROM Person
WHERE Id = 3;
INNER JOIN
JOIN, или внутреннее соединение, выбирает записи, соответствующие значениям в двух таблицах.
SELECT * FROM A x JOIN B y ON y.aId = x.Id
LEFT JOIN
LEFT JOIN возвращает все строки из левой таблицы и соответствующие им строки из правой таблицы. Строки из левой таблицы возвращаются даже при пустых значениях в правой таблице. Если для строк из левой таблицы нет соответствия в правой, то в значениях последней будет стоять null.
SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id
RIGHT JOIN
RIGHT JOIN возвращает все строки из правой таблицы и соответствующие им строки из левой. В отличие от левого соединения, здесь возвращаются все строки из правой таблицы, даже если им ничего не соответствует в левой. В таком случае, в значениях столбцов из левой таблицы будет стоять null.
SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id
FULL OUTER JOIN
FULL OUTER JOIN возвращает все строки, соответствующие условиям в любой из таблиц. Если в левой таблице есть строки, которым ничего не соответствует в правой, то они все равно отобразятся в результирующих значениях. То же самое распространяется и на строки из правой таблицы без соответствующих значений в левой.
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName
INSERT
INSERT используется для добавления данных в таблицу.
INSERT INTO table_name (column_1, column_2, column_3)
VALUES (value_1, 'value_2', value_3);
LIKE
LIKE используется в связке с WHERE или HAVING (в составе оператора GROUP BY) и ограничивает выбранные строки по элементам, если в столбце содержится определенный шаблон символов.
Этот SQL запрос выбирает студентов, чье значение в FullName начинается с «Monique» или заканчивается с «Greene».
SELECT studentID, FullName, sat_score, rcd_updated
FROM student
WHERE
FullName LIKE 'Monique%' OR
FullName LIKE '%Greene';
+-----------+---------------+-----------+---------------------+
| studentID | FullName | sat_score | rcd_updated |
+-----------+---------------+-----------+---------------------+
| 1 | Monique Davis | 400 | 2017-08-16 15:34:50 |
| 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 |
+-----------+---------------+-----------+---------------------+
2 rows in set (0.00 sec)
Перед LIKE вы можете добавить NOT, и тогда строки, соответствующие условию, будут исключаться, а не добавляться. Этот SQL исключает записи, у которых в столбце FULL NAME содержится «cer Pau» и «Ted».
SELECT studentID, FullName, sat_score, rcd_updated
FROM student
WHERE FullName NOT LIKE '%cer Pau%' AND FullName NOT LIKE '%"Ted"%';
+-----------+----------------------+-----------+---------------------+
| studentID | FullName | sat_score | rcd_updated |
+-----------+----------------------+-----------+---------------------+
| 1 | Monique Davis | 400 | 2017-08-16 15:34:50 |
| 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 |
| 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 |
| 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 |
| 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 |
| 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 |
| 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 |
+-----------+----------------------+-----------+---------------------+
7 rows in set (0.00 sec)