Popular Tags:

Шпаргалка по SQL

28.03.2019 at 18:02


Собрал шаблоны типовых запросов, в конце поста задачник на эти запросы. Синтаксис во всех запросах — MS SQL.

Шаблоны типовых запросов SQL

Выборка записей из таблицы

select поле1, поле2 from таблица1

вместо списка полей может быть * — тогда выведудтся все поля

Выборка записей из таблицы с сортировкой по возрастанию

select поле1, поле2 from таблица1 order by поле1 asc

Выборка записей из таблицы с сортировкой по убыванию

select поле1, поле2 from таблица1 order by поле1 desc

Выборка записей из таблицы с условием на численное поле

select поле1, поле2 from таблица1 where поле1 = 777

вместо = может быть , < , >=, < =

Выборка записей из таблицы с условием на строковое поле
select поле1, поле2 from таблица1 where поле1 = "777"

Выборка с группировкой

select поле1, sum(поле2) from таблица1
group by поле1

вместо sum может быть min, max, count и другие функции
все поля, к которым не применяются функции, должны быть перечислены в секции group by

Выборка из двух таблиц

select таб1.поле1, таб2.поле2
from таблица1 as таб1
join таблица2 as таб2 on таб2.поле3 = таб1.поле4

вместо таблица2 может быть таблица1, если в таблице есть поле, ссылающееся на эту же таблицу

Вставка новой записи

insert into таблица1
    ([поле1], [поле2])
values
    (значениие1, значение2)

Изменение записи

update таблица1
set поле1 = значение1
where поле2 = значение2

Удаление записи

delete from таблица1
where поле1 = значение1

Задачник по SQL

Для решения задач можно использовать сервис http://sqlfiddle.com

Нужно выбрать базу данных MS SQL и создать тестовую базу запросом:

CREATE TABLE Departments
    ([Id] int, [Name] varchar(100))
;

CREATE TABLE Employees
    ([Id] int, [Name] varchar(100), [Salary] int, [ManagerId] int, [DepartamentId] int)
;

INSERT INTO Departments
    ([Id], [Name])
VALUES
    (1, 'Sales'),
    (2, 'Development')
;


INSERT INTO Employees
    ([Id], [Name], [Salary], [ManagerId], [DepartamentId])
VALUES
    (1, 'Ivanov', 100000, null, 1),
    (2, 'Petrov', 120000, 1, 1),
    (3, 'Sidorov', 130000, 2, 1),
    (4, 'Korotkov', 120000, 2, 1),
    (5, 'Filev', 90000, 1, 1),
    (6, 'Smirnov', 125000, null, 2),
    (7, 'Godov', 125000, null, null)  
;

Задачи:

  1. Фамилии и зарплаты всех сотрудников
  2. Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по возрастанию
  3. Фамилии и зарплаты всех сотрудников, отсортированные по зарплате по убыванию
  4. Фамилии и зарплаты всех сотрудников, у которых зарплата больше 100000
  5. Фамилии и зарплаты всех сотрудников, у которых зарплата равна 100000
  6. Фамилии и зарплаты всех сотрудников, у которых зарплата больше либо равна 100000
  7. Фамилии и зарплаты всех сотрудников, у которых фамилия Ivanov
  8. Ид департамента и максимальная зарплата в этом департаменте
  9. Имя сотрудника и название его отдела
  10. Имя сотрудника и имя его начальника
  11. Добавить сотрудника с именем Semenov, зарплатой 70000, менеджером Ivanov и отделом Sales
  12. Изменить зарплату сотрудника Godov на 80000
  13. Удалить сотрудника Godov
”Решения

/*1.

read more

Создание и публикация nuget пакета

08.01.2019 at 17:18

nuget — это пакетный менеджер для C#. Создавать пакеты можно двумя способами: через Visual Studio и через командную строку. Я выбираю второй, так как его можно использовать на линуксе. Покажу на примере своего проекта ru.lsreg.math.

Сначала нужно зарегистрироваться на nuget.org

После этого добавляем в csproj файл в существующую PropertyGroup несколько свойств

< PackageId>ru.lsreg.math< /PackageId>
< Version>1.0.0< /Version>
< Authors>Mikhail Gubanov< /Authors>
< Company>lsreg.ru< /Company>
< PackageProjectUrl>http://lsreg.ru< /PackageProjectUrl>
< RepositoryUrl>https://github.com/lsreg/ru.lsreg.math< /RepositoryUrl>

Первые 4 обязательны, остальные опциональны. read more

Работа с матрицами на C#. Продолжение.

07.01.2019 at 12:08

Единичная матрица

Единичная матрица — это квадратная матрица, на главной диагонали которой все элементы равны 1, а все остальные элементы равны 0.

Для создания такой матрицы добавим статический метод

public static Matrix CreateIdentityMatrix(int n)
{
    var result = new Matrix(n, n);
    for (var i = 0; i < n; i++)
    {
        result[i, i] = 1;
    }
    return result;
}

По хорошему бы конечно использовать для таких целей именованный конструктор. read more

Детерминант матрицы на C#

28.12.2018 at 22:40

Детерминант (или определитель) матрицы можно вычислить огромным количеством способов. Мы воспользуемся следующей формулой:

где — определитель матрицы, полученной из исходной вырезанием 1 строки и j столбца.

Для начала научимся вырезать из матрицы столбец:

private Matrix CreateMatrixWithoutColumn(int column)
{
    if (column < 0 || column >= this.N)
    {
        throw new ArgumentException("invalid column index");
    }
    var result = new Matrix(this.M, this.N - 1);
    result.ProcessFunctionOverData((i, j) => 
        result[i, j] = j < column ?
read more

Бинарный поиск в C#

19.12.2018 at 14:01

Бинарный поиск — классический алгоритм. На вход алгоритм принимает отсортированный массив чисел и число для поиска. На выходе — индекс этого числа в массиве.

Алгоритмически это выглядит так:

  1. Запоминаем левую L и правую R границы массива (индексы, а не значения)
  2. Берем индекс M посередине между L и R
  3. Если значение массива по индексу M меньше нужного — L меняем на M, если больше — R меняем на M
  4. Возвращаемся на шаг 2

Таким образом мы на каждом шаге алгоритма сужаем область поиска в 2 раза. read more

Работа с матрицами в C#

17.12.2018 at 10:37

Матрица представляет из себя двумерный массив. Для начала создадим класс матрицы

public class Matrix {
    private double[,] data;

    private int m;
    public int M {get => this.m;}
    
    private int n;
    public int N {get => this.n;}
    
    public Matrix(int m, int n) 
    {
        this.m = m;
        this.n = n;
        this.data = new double[m, n];
    }
}

Пока этот класс явлеятся просто оберткой для двумерного массива. read more

Списки в flutter

07.12.2018 at 09:00

Для отображения списков в flutter используется виджет ListView. В свойство children нужно передать массив элементов списка

body: ListView(children: <Widget>[
  ListTile(title: Text('test 1')),
  ListTile(title: Text('test 2')),
  ListTile(title: Text('test 3'))
])

Выглядеть такой виджет будет вот так:

Содержимым ListView могут быть любые виджеты, не только ListTile. ListTile всего лишь подготовленный виджет, хорошо выглядящий в списке и имеющий много полезных свойств, например

ListTile(
  leading: Icon(Icons.work),
  title: Text('test 1'),
  trailing: Icon(Icons.star),
  subtitle: Text('subtitle text'),
  isThreeLine: true,
)

получится такой виджет:

Динамические списки в flutter

Чаще всего содержимое списка не известно заранее. read more

Сериализация и десериализация JSON в flutter для больших проектов

06.12.2018 at 08:14

В прошлой статье я рассказывал о получении JSON по HTTP и десериализации ответа. Парсинг JSON был сделан вручную. Такой вариант подходит для маленьких проектов, разрабатываемых в одиночку, но вызовет множество проблем в более крупном проекте.

Для крупных проектов разбор JSON лучше генерировать. Используется для этого пакет json_serializable.

В файле pubspec.yaml в секцию dependencies добавляем

json_annotation: ^2.0.0

А в секцию dev_dependencies

build_runner: ^1.0.0
json_serializable: ^2.0.0

dev_dependencies — это зависимости, которые используются в процессе разработки но не используются в production коде. read more

flutter: получение JSON по HTTP и парсинг ответа

04.12.2018 at 09:12

Для работы с http в dart нужно подключить пакет http. Для этого в файл pubspec.yaml в секцию dependencies добавляем строчку

http: ^0.12.0

После этого загружаем пакет командой

flutter packages get

В файле подключаем импорты

import 'package:http/http.dart' as http;
import 'dart:convert';

Второй импорт нужен будет для парсинга JSON из строки ответа.

Создаем класс с данными (в примере это данные пользователя)

class User {
  final int id;
  final String name;
  final String email;

  User({this.id, this.name, this.email});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      email: json['email']
    );
  }
}

В классе User сделана фабрика для создания пользователя из JSON. read more

Шум Перлина на C#

09.06.2018 at 11:39

Шум Перлина — алгоритм генерации текстур, который придумал Кен Перлин в 1983 году. Позже он улучшил свой алгоритм, который теперь так и называется — улучшенный шум Перлина.
Особенность такой генерации в том, что шум Перлина генерирует случайные числа для любой точки пространства, но случайные значения отличаются незначительно для точек, находящихся недалеко друг от друга. read more