├── LICENSE └── PMDB-DML.sql /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Metigator 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PMDB-DML.sql: -------------------------------------------------------------------------------- 1 | USE PMDB; 2 | GO 3 | 4 | INSERT INTO PM.Companies (CRNNO, CompanyName) VALUES (101, N'Company A'); 5 | 6 | INSERT INTO PM.Companies (CompanyName, CRNNO) VALUES (N'Company B', 102); 7 | 8 | INSERT INTO PM.Companies VALUES (103, N'Company C'); 9 | 10 | INSERT INTO PM.Companies VALUES 11 | (104, N'Company D'), 12 | (105, N'Company E'), 13 | (106, N'Company F'), 14 | (107, N'Company G'); 15 | GO 16 | 17 | 18 | INSERT INTO PM.Managers (Id ,Email) VALUES (201, 'peter@fake.com'); 19 | INSERT INTO PM.Managers (Id ,Email) VALUES (202, 'mike@fake.com'); 20 | INSERT INTO PM.Managers (Id ,Email) VALUES (203, 'reem@fake.com'); 21 | INSERT INTO PM.Managers (Id ,Email) VALUES (204, 'salah@fake.com'); 22 | 23 | GO 24 | INSERT INTO PM.Technologies(Id , Name) VALUES (301, 'SQL SERVER'); 25 | INSERT INTO PM.Technologies(Id , Name) VALUES (302, 'ASP NET CORE'); 26 | INSERT INTO PM.Technologies(Id , Name) VALUES (303, 'ANGULAR'); 27 | INSERT INTO PM.Technologies(Id , Name) VALUES (304, 'REACT'); 28 | INSERT INTO PM.Technologies(Id , Name) VALUES (305, 'WPF'); 29 | INSERT INTO PM.Technologies(Id , Name) VALUES (306, 'ANDROID'); 30 | INSERT INTO PM.Technologies(Id , Name) VALUES (307, 'ORACLE'); 31 | INSERT INTO PM.Technologies(Id , Name) VALUES (308, 'PHP'); 32 | 33 | GO 34 | 35 | INSERT INTO PM.Projects ( PRJNO, Title, ManagerId, StartDate, InitialCost, Parked, CRNNO) 36 | VALUES ( 401, 'CMS', 201, '2022-01-01', 15000000, 0, 101), 37 | ( 402, 'ERP', 202, '2022-02-01', 20000000, 0, 102), 38 | ( 403, 'CMS', 203, '2022-03-01', 15000000, 0, 105), 39 | ( 404, 'Authenticator', 204, '2022-04-01', 150000, 0, 101), 40 | ( 405, 'CRM-DESKTOP', 203, '2022-05-01', 20000000, 0, 104), 41 | ( 406, 'ERP', 204, '2022-06-01', 20000000, 0, 105), 42 | ( 407, 'HUB', 204, '2022-06-01', 20000000, 1, 104); 43 | 44 | GO 45 | 46 | INSERT INTO PM.ProjectTechnologies (PRJNO, TechnologyId) VALUES 47 | ( 401, 301), 48 | ( 401, 302), 49 | ( 401, 303), 50 | ( 402, 301), 51 | ( 402, 302), 52 | ( 402, 304), 53 | ( 403, 301), 54 | ( 403, 302), 55 | ( 403, 308), 56 | ( 404, 306), 57 | ( 405, 307), 58 | ( 405, 305), 59 | ( 406, 307), 60 | ( 406, 308); 61 | GO 62 | 63 | -- SELECT 64 | 65 | SELECT PRJNO, Title, ManagerId, StartDate, InitialCost, Parked, CRNNO 66 | FROM PM.Projects; 67 | 68 | SELECT * 69 | FROM PM.Projects; 70 | 71 | SELECT PRJNO, Title 72 | FROM PM.Projects; 73 | 74 | -- WHERE 75 | SELECT * FROM PM.Projects WHERE InitialCost >= 1000000; 76 | SELECT * FROM PM.Projects WHERE NOT InitialCost >= 1000000; 77 | SELECT * FROM PM.Projects WHERE InitialCost >= 1000000 AND StartDate >= '2022-03-01'; 78 | SELECT * FROM PM.Projects WHERE InitialCost >= 1000000 OR StartDate >= '2022-03-01'; 79 | 80 | -- LIKE (%, _) 81 | -- LIKE xx% starts with 82 | SELECT * FROM PM.Projects WHERE Title like 'C%' 83 | -- LIKE %xx ends with 84 | SELECT * FROM PM.Projects WHERE Title like '%P' 85 | -- LIKE %xx% contains 86 | SELECT * FROM PM.Projects WHERE Title like '%DESK%' 87 | -- LIKE _R% 88 | SELECT * FROM PM.Projects WHERE Title like '_R_'; 89 | SELECT * FROM PM.Projects WHERE InitialCost like '_5%'; 90 | 91 | -- TOP 92 | SELECT TOP 3 * From PM.Projects 93 | SELECT TOP 2 PERCENT * From PM.Projects 94 | 95 | -- ORDER BY 96 | SELECT * FROM PM.Projects ORDER BY StartDate; 97 | SELECT * FROM PM.Projects ORDER BY StartDate DESC; 98 | SELECT * FROM PM.Projects ORDER BY InitialCost, StartDate DESC; 99 | 100 | -- GROUP BY 101 | 102 | SELECT Title, COUNT(*) FROM PM.Projects GROUP BY Title; 103 | 104 | SELECT ManagerId, COUNT(*) 105 | FROM PM.Projects 106 | WHERE Parked = 0 107 | GROUP BY ManagerId 108 | HAVING COUNT(*) >= 2; 109 | 110 | -- DISTINT 111 | SELECT DISTINCT Title FROM PM.Projects 112 | SELECT DISTINCT InitialCost FROM PM.Projects 113 | 114 | -- Tables JOIN 115 | 116 | SELECT * FROM PM.Projects; 117 | SELECT * FROM PM.Managers; 118 | 119 | -- PRJNO, TITLE, Manager_Email 120 | SELECT * FROM PM.Projects, PM.Managers; 121 | SELECT PRJNO, Title, Email FROM PM.Projects, PM.Managers; -- Cartisian Product 122 | SELECT PRJNO, Title, Email, PM.Managers.Id, PM.Projects.ManagerId FROM PM.Projects, PM.Managers 123 | WHERE PM.Projects.ManagerId = PM.Managers.Id; 124 | 125 | -- INNET JOIN Match in two tables 126 | 127 | 128 | SELECT 129 | (P.PRJNO) AS N'رقم المشروع' 130 | , (P.Title) AS N'عنوان المشروع' 131 | , (M.Email) AS N'البريد الالكتروني لمدير المشروع' FROM 132 | PM.Projects AS P INNER JOIN PM.Managers AS M 133 | ON P.ManagerId = M.Id; 134 | 135 | -- LEFT JOIN ( ALL ROWS FROM LEFT TABLE EVEN NO MATCH 136 | 137 | SELECT * FROM PM.COMPANIES; 138 | SELECT * FROM PM.Projects; 139 | 140 | SELECT 141 | (P.PRJNO) 142 | , (P.Title) 143 | , (C.CompanyName) FROM 144 | PM.Projects AS P LEFT JOIN PM.Companies AS C 145 | ON P.CRNNO = C.CRNNO; 146 | 147 | SELECT 148 | (P.PRJNO) 149 | , (P.Title) 150 | , (C.CRNNO) 151 | , (C.CompanyName) FROM 152 | PM.Companies AS C LEFT JOIN PM.Projects AS P 153 | ON P.CRNNO = C.CRNNO; 154 | 155 | -- LEFT JOIN ( ALL ROWS FROM RIGHT TABLE EVEN NO MATCH 156 | SELECT 157 | (P.PRJNO) 158 | , (P.Title) 159 | , (C.CompanyName) FROM 160 | PM.Projects AS P RIGHT JOIN PM.Companies AS C 161 | ON P.CRNNO = C.CRNNO; 162 | 163 | -- LEFT JOIN ( ALL ROWS FROM RIGHT TABLE EVEN NO MATCH 164 | SELECT 165 | (P.PRJNO) 166 | , (P.Title) 167 | , (C.CompanyName) FROM 168 | PM.Projects AS P FULL JOIN PM.Companies AS C 169 | ON P.CRNNO = C.CRNNO; 170 | 171 | 172 | -- UPDATE 173 | UPDATE PM.Projects 174 | SET StartDate = '2022-07-10' 175 | WHERE PRJNO = 407; 176 | 177 | -- DELETE 178 | 179 | DELETE FROM PM.Projects WHERE PRJNO = 406; 180 | 181 | DROP TABLE PM.PROJECTS; 182 | TRUNCATE TABLE PM.PROJECTS; 183 | 184 | -- SUBQUERY 185 | SELECT * FROM PM.Projects; 186 | SELECT * FROM PM.ProjectTechnologies; 187 | SELECT * FROM PM.Technologies; 188 | 189 | 190 | UPDATE PM.Projects SET InitialCost = InitialCost * 1.05 191 | WHERE 192 | PRJNO IN ( SELECT PRJNO FROM PM.ProjectTechnologies 193 | WHERE TechnologyId = (SELECT Id FROM PM.Technologies WHERE Name = 'ORACLE')); --------------------------------------------------------------------------------