La soi-disant vue fait référence à l'ensemble de résultats récupéré par l'instruction de requête SQL, qui apparaît sous la forme d'une table virtuelle, contrairement à la table physique réelle, elle n'existe pas dans la base de données. Le rôle d'une vue est de simplifier les requêtes complexes en concentrant les opérations d'association et de filtrage multi-tables dans une seule vue, puis en interrogeant la vue pour obtenir les résultats requis. Les vues ont les caractéristiques suivantes :
Les vues ne stockent pas de données, mais sont générées dynamiquement en fonction des résultats des instructions SELECT ;
Les vues peuvent uniquement être lues, pas écrites ;
Les vues peuvent être créées sur la base d'une ou plusieurs tables.
Ce qui suit est un exemple de création d'une vue :
CREATE VIEW vw_employee AS SELECT e.emp_no, e.first_name, e.last_name, d.dept_name FROM employees e JOIN departments d ON e.dept_no = d.dept_no;
Cette instruction crée une vue nommée vw_employee, qui contient les données des tables des employés et des services. Vous pouvez interroger la vue avec l'instruction suivante :
SELECT * FROM vw_employee;
. Une fonction est une unité de programme réutilisable qui encapsule un élément logique spécifique et peut être utilisée pour accomplir une tâche spécifique. Dans MySQL, les fonctions sont divisées en deux catégories : les fonctions scalaires et les fonctions d'agrégation. Les fonctions scalaires génèrent une valeur unique, tandis que les fonctions d'agrégation génèrent des valeurs globales telles que COUNT, SUM, AVG, etc. Les fonctions ont les caractéristiques suivantes :
les fonctions ont des entrées et des sorties, peuvent recevoir des paramètres et renvoyer des résultats ;
les fonctions peuvent appeler d'autres fonctions ;
les fonctions peuvent être des appels imbriqués ;
Ce qui suit est un exemple de création d'une fonction scalaire :
CREATE FUNCTION get_employee_name ( emp_no INT ) RETURNS VARCHAR ( 50 ) BEGIN DECLARE emp_name VARCHAR ( 50 ); SELECT CONCAT_WS( ' ', first_name, last_name ) INTO emp_name FROM employees WHERE emp_no = emp_no; RETURN emp_name; END;
Cette instruction crée une fonction scalaire nommée get_employee_name, qui reçoit un numéro d'employé et renvoie le nom de l'employé.
Appelez cette fonction :
SELECT get_employee_name (100001);
Une procédure stockée est un ensemble d'instructions SQL prédéfinies qui sont encapsulées dans une unité et peuvent être appelées à plusieurs reprises. Les procédures stockées peuvent recevoir des paramètres d'entrée et des paramètres de sortie, et elles ont les caractéristiques suivantes :
Les procédures stockées peuvent contenir plusieurs instructions SQL et peuvent effectuer des tâches complexes ;
Les procédures stockées peuvent être exécutées côté serveur, réduisant ainsi la surcharge de transmission réseau ; les procédures peuvent être partagées par plusieurs applications.
Ce qui suit est un exemple d'utilisation de procédures stockées, en supposant que nous disposons des trois tables suivantes :
CREATE TABLE employees ( emp_no INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), gender ENUM('M', 'F'), birth_date DATE, hire_date DATE );
INSERT INTO employees VALUES (10001, 'Georgi', 'Facello', 'M', '1953-09-02', '1986-06-26'), (10002, 'Bezalel', 'Simmel', 'F', '1964-06-02', '1985-11-21'), (10003, 'Parto', 'Bamford', 'M', '1959-12-03', '1986-08-28'), (10004, 'Chirstian', 'Koblick', 'M', '1955-01-05', '1986-12-01'), (10005, 'Kyoichi', 'Maliniak', 'M', '1959-09-12', '1989-09-12'), (10006, 'Anneke', 'Preusig', 'F', '1953-04-20', '1989-06-02'), (10007, 'Tzvetan', 'Zielinski', 'F', '1957-05-23', '1989-02-10');
CREATE TABLE departments ( dept_no CHAR(4) PRIMARY KEY, dept_name VARCHAR(50) );
INSERT INTO departments VALUES ('d001', 'Marketing'), ('d002', 'Finance'), ('d003', 'Human Resources'), ('d004', 'Production'), ('d005', 'Development'), ('d006', 'Quality Management'), ('d007', 'Sales'), ('d008', 'Research');
CREATE TABLE dept_emp ( emp_no INT, dept_no CHAR(4), from_date DATE, to_date DATE, PRIMARY KEY (emp_no, dept_no) );
INSERT INTO dept_emp VALUES (10001, 'd001', '1986-06-26', '9999-01-01'), (10002, 'd001', '1985-11-21', '9999-01-01'), (10003, 'd002', '1986-08-28', '9999-01-01'), (10004, 'd005', '1986-12-01', '9999-01-01'), (10005, 'd005', '1989-09-12', '9999-01-01'), (10006, 'd006', '1989-06-02', '9999-01-01'), (10007, 'd007', '1989-02-10', '9999-01-01');
CREATE PROCEDURE get_employee_by_dept ( IN dept_name VARCHAR ( 50 ), OUT employee_count INT ) BEGIN SELECT COUNT(*) INTO employee_count FROM employees e JOIN dept_emp de ON e.emp_no = de.emp_no JOIN departments d ON de.dept_no = d.dept_no WHERE d.dept_name = dept_name; SELECT e.emp_no, e.first_name, e.last_name, e.gender, e.birth_date, e.hire_date FROM employees e JOIN dept_emp de ON e.emp_no = de.emp_no JOIN departments d ON de.dept_no = d.dept_no WHERE d.dept_name = dept_name; END;
CALL get_employee_by_dept('Development', @employee_count); SELECT @employee_count;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!