Google scripts

1.

Изначальный код
----------------------------------
function myFunction10() {
 
    // https://developers.google.com/apps-script/reference/mail/mail-app
 
    // Отправляем простое письмо
    MailApp.sendEmail({
        to: 'mymail@gmail.com', // Email получателя письма
        subject: 'Тема письма',
        body: "Line 1\r\nLine 2\r\nLine 3", // Содержимое письма
    });
 
    // Отправляем письмо с прикрепленным файлом
 
    // 1bPpy2Mm7sAffcZwSvuxOooPfrhfEWuE2 - ID Pdf файла, хранящегося на гугл диске
    var pdfFileBlob = DriveApp.getFileById( '1bPpy2Mm7sAffcZwSvuxOooPfrhfEWuE2' ).getBlob();
 
    MailApp.sendEmail({
        to: 'mymail@gmail.com', // Email получателя письма
        subject: 'Тема письма 2',
        body: "Line 1\r\nLine 2\r\nLine 3", // Содержимое письма
 
        // Прикрепляем файл
        attachments: [pdfFileBlob]
    });
 
}
Мой код
------------------------------------

function myFunction() {
  let ss = SpreadsheetApp.getActiveSpreadsheet(); //активация таблицы
  let sheet =  ss.getSheetByName('Лист1'); // нахождение нудной таблицы по названию
  let dataRange = sheet.getRange(2,1,4,3).getValues(); // нахождение диапазона ячеек(2 строка, 1 столбец, 4 кол-во строк, 3 кол-во столбцов)

  for(let i = 0; i < dataRange.length; i++){ // с помощью цикла происходит отправка писем, заканчивается на 4 (длина срок)
    let mail = dataRange[i][0];
    let ru = dataRange[i][1];
    let en = dataRange[i][2];
    MailApp.sendEmail(mail, ru, en, "Hello"); // Отправляем письмо внутри цикла
  };

// 1bPpy2Mm7sAffcZwSvuxOooPfrhfEWuE2 - ID Pdf файла, хранящегося на гугл диске
    var pdfFileBlob = DriveApp.getFileById( '18JhxnP1XHskmcSkjKXlGljAlKdrsVPGvuOUTxvHwVtI' ).getBlob();

    MailApp.sendEmail({
        to: 'andrei.tupitsin@gmail.com', // Email получателя письма
        subject: 'Тема письма 2',
        body: "Line 1\r\nLine 2\r\nLine 3", // Содержимое письма

        // Прикрепляем файл
        attachments: [pdfFileBlob]
    });
}

2.

Исходный код
-------------------------------

// Функция onOpen() запускается автоматически при открытии документа
// https://developers.google.com/apps-script/guides/triggers/#onopen
function onOpen() {
 
  // Создаём новое меню
  // https://developers.google.com/apps-script/reference/base/ui#createmenucaption
  SpreadsheetApp.getUi()
      .createMenu('Custom Menu')
      .addItem('Show alert', 'showAlert')
      .addItem('Show prompt', 'showPrompt')
      .addToUi();
}
 
function showAlert() {
  var ui = SpreadsheetApp.getUi();
 
  // https://developers.google.com/apps-script/reference/base/ui#alerttitle-prompt-buttons
  var result = ui.alert(
     'Подтвердите действие', // Заголовок окна
     'Вы уверены, что хотите продолжить?', // Сообщение
      ui.ButtonSet.YES_NO // Кнопки
  );
 
  if (result == ui.Button.YES) { // Пользователь нажал на "Да"
    // User clicked "Yes".
    ui.alert('Подтверждение получено.');
  } else { // Пользователь нажал на "Нет" или на X (закрыл окно)
    ui.alert('В разрешении отказано.');
  }
}
 
function showPrompt() {
  var ui = SpreadsheetApp.getUi();
 
  // https://developers.google.com/apps-script/reference/base/ui#prompttitle-prompt-buttons
  var result = ui.prompt(
      'Сообщите что-нибудь о себе!', // Заголовок
      'Введите своё имя:', // Сообщение
      ui.ButtonSet.OK_CANCEL // Кнопки
  );
 
  var button = result.getSelectedButton(); // Кнопка, на которую нажал пользователь
  var text = result.getResponseText(); // Текст, который ввёл пользователь
 
  if (button == ui.Button.OK) {
    ui.alert('Ваше имя: ' + text + '.');
  } else if (button == ui.Button.CANCEL) {
    ui.alert('Вы отказались вводить своё имя.');
  } else if (button == ui.Button.CLOSE) {
    ui.alert('Вы закрыли окно.');
  }
}
Мой код
---------------------------------

// Функция onOpen() запускается автоматически при открытии документа
// https://developers.google.com/apps-script/guides/triggers/#onopen
function onOpen() {
 
  // Создаём новое меню
  // https://developers.google.com/apps-script/reference/base/ui#createmenucaption
  SpreadsheetApp.getUi()
      .createMenu('Custom Menu')
      .addItem('Show alert', 'showAlert')
      .addItem('Show prompt', 'showPrompt')
      .addItem('Show prompt2', 'showPrompt2')
      .addToUi();
}
 
function showAlert() {
  var ui = SpreadsheetApp.getUi();
 
  // https://developers.google.com/apps-script/reference/base/ui#alerttitle-prompt-buttons
  var result = ui.alert(
     'Подтвердите действие', // Заголовок окна
     'Вы уверены, что хотите продолжить?', // Сообщение
      ui.ButtonSet.YES_NO // Кнопки
  );
 
  if (result == ui.Button.YES) { // Пользователь нажал на "Да"
    // User clicked "Yes".
    ui.alert('Подтверждение получено.');
  } else { // Пользователь нажал на "Нет" или на X (закрыл окно)
    ui.alert('В разрешении отказано.');
  }
}
 
function showPrompt() {
  var ui = SpreadsheetApp.getUi();
 
  // https://developers.google.com/apps-script/reference/base/ui#prompttitle-prompt-buttons
  var result = ui.prompt(
      'Сообщите что-нибудь о себе!', // Заголовок
      'Введите своё имя:', // Сообщение
      ui.ButtonSet.OK_CANCEL // Кнопки
  );
 
  var button = result.getSelectedButton(); // Кнопка, на которую нажал пользователь
  var text = result.getResponseText(); // Текст, который ввёл пользователь
 
  if (button == ui.Button.OK) {
    ui.alert('Ваше имя: ' + text + '.');
  } else if (button == ui.Button.CANCEL) {
    ui.alert('Вы отказались вводить своё имя.');
  } else if (button == ui.Button.CLOSE) {
    ui.alert('Вы закрыли окно.');
  }
}

function showPrompt2() {
  var ui = SpreadsheetApp.getUi();
 
  // https://developers.google.com/apps-script/reference/base/ui#prompttitle-prompt-buttons
  var result = ui.prompt(
      'Сколько вам лет', // Заголовок
      'Возраст:', // Сообщение
      ui.ButtonSet.OK_CANCEL // Кнопки
  );
 
  var button = result.getSelectedButton(); // Кнопка, на которую нажал пользователь
  var text = result.getResponseText(); // Текст, который ввёл пользователь
 
  if (button == ui.Button.OK) {
    ui.alert('Возраст: ' + text + '.');
  } else if (button == ui.Button.CANCEL) {
    ui.alert('Отказ.');
  } else if (button == ui.Button.CLOSE) {
    ui.alert('Вы закрыли окно.');
  }
}

Andmebaasisüsteemide alused

SQL statements

DDL – Data Definition Language (CREATE TABLE, ALTER TABLE)

DML -Data Manipulation Language (INSERT INTO, DELETE FROM, UPDATE)

——————————————————————————————

Piirangud — Ограничения

Primary key — значение столбца уникально

Foreign key — столбец использует значение из связаной таблицы

NOT NULL — не пустое значение

UNIQUE — не повторяющее значение

CHECK — выбор некоторых значений

——————————————————————————————

Типы данных

SQL относится к категории языков с сильной типизацией. Это означает, что с любым объектом данных, связывается определенный тип, даже если на первый взгляд это и не очевидно. Тип данных одновременно определяет и ограничивает разновидности операций, которые могут выполняться с этими данными.
SQL поддерживает несколько типов данных, которые можно разделить на три категории: символьные (строковые) типы данных, числовые типы данных и типы данных для хранения даты и времени.

Символьные (строковые) типы

  • CHAR(n) или CHARACTER(n) – Текст фиксированной дилны (по умолчанию длиной 1, максимум – 255 знаков);
  • CHARACTER VARYING(n) или CHAR VARYING(n) – текст переменной длины, max длина — n знаков;

Числовые типы

Числовые типы используются для представления целых и вещественных значений. С общей точки зрения к числовым типам SQL относятся следующие типы:

  • 2-, 4- и 8-байтовые целые числа;
    • SMALLINT, INT2 (-32768…32767) в MS SQL также tinyint (0 до 255)
    • INTEGER, INT, INT4 (от -2 147 483 648 до 2 147 483 647)
    • BIGINT, INT8 (от -9 223 372 036 854 775 807 до 9 223 372 036 854 775 807)
  • 4- и 8-байтовые вещественные числа;
    • REAL, FLOAT4 (шесть значащих цифр, неограниченный размер с ограниченной точностью)
    • DOUBLE PRECISION, FLOAT8, FLOAT (15 значащих цифр, неограниченный размер с ограниченной точностью)
  • дробные числа с фиксированной точностью
    • NUMERIC(p,s), DECIMAL (p,s) — целые и вещественные числа из р цифр (всего) и s цифр в дробной части
  • тип MONEY – хранение информации денежного типа; обеспечивает точность значений до 4 знаков после запятой и занимает 8 байт.

Логические и двоичные типы

  • BOOLEAN, BOOL — Отдельная логическая величина (TRUE или FALSE).
  • BIT — позволяет хранить один бит, который принимает значения 0, 1 или NULL. Строковые значения TRUE и FALSE можно преобразовать в значения типа bit: TRUE преобразуется в 1, а FALSE – в 0.

Тип даты и времени

  • DATE – тип данных для хранения даты;
  • TIME — тип данных для хранения времени;
  • INTERVAL — тип данных для хранения временного интервала;
  • DATETIME — тип данных для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд).

Типы данных MS Access SQL

  • TEXT(n) – текст переменной длины, max длина — n знаков;
  • MEMO – текст, по объему превышающий 255 символов
  • BYTE, INTEGER, LONG – целые числа
  • COUNTER – счетчик, целые числа
  • SINGLE DOUBLE CURRENCY – вещественные числа
  • DATETIME — дата и время
  • YESNO – Логический тип
  • LONGBINARY – OleObject, двоичный тип

——————————————————————————————

SQL laused

DDL — DATA DEFINITION (CREATE TABLE ,ALTER TABLE)

DML — DATA MANIPULATION LANGUAGE(INSERT INTO, DELETE FROM,UPDATE, ETC)

——————————————————————————————

Table creation (DDL)

CREATE TABLE toode(
    toodeID int primary key AUTO_INCREMENT,
    toodeNimetus varchar(50),
    toodeHind decimal(5, 2),
    v_kuupaev date,
    kas_olemas bit
);

Adding data to the table (DML)

INSERT INTO toode(toodeNimetus, toodeHind, kas_olemas, v_kuupaev)
VALUES ('piim Alma', 1.50, 1, '2024-01-31');
SELECT * FROM toode;
INSERT INTO toode(toodeNimetus, toodeHind, kas_olemas, v_kuupaev)
VALUES ('piim Alma', 1.50, 1, '2024-01-31');
SELECT * FROM toode;
CREATE TABLE `ANDREIBAS`.`tellimus` (`tellimusID` INT NOT NULL AUTO_INCREMENT , `tellimuseKuupaev` DATE NOT NULL , `toodeID` INT NOT NULL , `klient` VARCHAR(50) NOT NULL , PRIMARY KEY (`tellimusID`)) ENGINE = InnoDB; 
CREATE table Product(
    idProduct int primary key AUTO_INCREMENT,
    ProductName varchar(50),
    idCategory int,
    Price decimal(6, 2),
    FOREIGN key(idCategory) REFERENCES category(idCategory)
);
 
create table customer(
    idCustomer int PRIMARY KEY AUTO_INCREMENT,
    nameCustomer varchar(100) UNIQUE,
    contactCustomer varchar(50)
);
insert into product(ProductName, idCategory, Price)
VALUES ('boots', 3, 100.99)
 
insert into Sale(idProduct, Count_, DateOfSale)
values(1,200,'2024-01-31'),(3,200,'2024-01-31'),(4,100,'2024-01-31'),(3,250,'2024-01-31'),(3,57,'2024-01-31');
 
insert into customer(nameCustomer, contactCustomer)
values('Marko', 55614815');
ALTER TABLE sale ADD units char(5);
 
alter table sale add FOREIGN KEY(idCustomer) REFERENCES customer(idCustomer)
	
update sale set idCustomer=1;

SELECT QUERY

	--Страны, названия которых начинаются на букву “К” (5 записей);
SELECT * FROM country WHERE NAME LIKE 'K%'; 


--Страны, получившие независимость в 19-м веке (27 записей)
SELECT Name, IndepYear from country WHERE IndepYear BETWEEN 1800 AND 1899; 

--Страны ближнего востока (Middle East) (18 записей)
SELECT Name,Region FROM country WHERE region like 'Middle East%'; 


--Европейские страны, которые образовались в 19 веке (7 записей)
SELECT Name, IndepYear, Continent from country Where(IndepYear BETWEEN 1800 and 1899) and Continent like'Europe%'; 


--Страны, в названиях которых содержат слог “ра”  (9 записей)
SELECT Name from country where Name like '%pa%'; 


--Страны, названия которых начинаются на гласную букву  (A, E, I, O, U, Y) (42 записи);
--RLIKE '^[A, E, I, O, U, Y]' - ПРИНАДЛЕЖНОСТЬ К МНОЖЕСТВУ.
SELECT Name from country WHERE Name like'A%' OR NAME lIKE 'E%' OR NAME lIKE 'I%' OR NAME lIKE 'O%'OR NAME lIKE 'U%'OR NAME lIKE 'Y%'; 
SELECT Name 
from country 
WHERE Name RLIKE '^[A, E, I, O, U, Y]';


--Страны, названия которых начинаются и заканчиваются на одну и ту же букву. (20 записей)
SELECT Name FROM country WHERE LEFT(Name,1) like RIGHT(Name,1); 


--Государства, формой правления которых является различной формы монархия (43 записи)
SELECT name FROM country where GovernmentForm like '%Monarchy%'; 


--Страны, население которых меньше 1 млн. (85 записей)
SELECT Name from country WHERE Population < 1000000; 


--Самое древнее государство (China)
SELECT Name, IndepYear from country ORDER BY IndepYear LIMIT 1; 



--Страны, год обретения независимости которыми не определен (47 записей)
SELECT Name FROM country WHERE IndepYear = 0; 

--Самое маленькое по площади государство (Holy See (Vatican City State))
SELECT Name,SurfaceArea FROM country ORDER BY SurfaceArea LIMIT 1; 

--Первую десятку наиболее населенных государств мира
SELECT Name,Population FROM country ORDER BY Population DESC LIMIT 10; 

--Первую десятку наиболее населенных государств Европы
SELECT Name,Population FROM country WHERE Continent LIKE '%Europe%' ORDER BY Population DESC LIMIT 10; 

--Cуммарное число жителей стран Европы и суммарную площадь её государств (730 074 600, 23 049 133.9)
SELECT SUM(Population) AS 'Kokku elanike_arv', SUM(SurfaceArea) AS 'Kokku pindala' FROM country WHERE Continent LIKE '%Europe%'; 


--Число стран, расположенных не в Антарктике (234 записи)
SELECT COUNT(Name) FROM country WHERE Continent NOT like '%Antarctica%'; 


--Число стран, где главой правительства является Елизавета II (Elisabeth II), суммарное число жителей этих стран.  (35 стран, 122 872 550 человек)
SELECT SUM(Population), COUNT(*) FROM country WHERE HeadOfState like 'Elisabeth II'; 

--Число стран, наибольшее и наименьшее число жителей стран Полинезии (Polynesia) (10 стран, 235 000 человек, 50 человек)
SELECT COUNT(*) as RiikideArv, MIN(Population) as MIN, MAX(Population) as MAX FROM country WHERE Region LIKE 'Polynesia'; 

SQL CRIB SHEET

—————————————————————————————————————