1 01:07 2 Installing PostgreSQL on Mac 02:18 3 Installing PostgreSQL on Windows 06:01 4 Configure pgAdmin 4 client 02:02 5 03:55 6 02:31 7 Running a query in pgAdmin tool 02:12 8 Install sample data files on server 02:32 9 Install Human Resources (hr) database 02:22 10 Install sample stocks market data 02:05 11 Install northwind database 05:04 12 03:28 13 03:39 14 Creating the movie database and a actors table 06:19 15 Creating the directors table 03:30 16 Creating the movies table with a foreign key 05:55 17 Creating the movies_revenues table 03:45 18 Creating a Junction table with movies and actors tables 04:25 19 Install sample data for 'movies' database 05:51 20 Using pgAdmin - Create and modify a table 05:37 21 Using pgAdmin - View table structure, and create column 05:29 22 Using pgAdmin - Rename, delete and change the data type of a column 06:45 23 Deleting tables from a database 02:49 24 04:47 25 Insert multiple records into a table 02:36 26 Insert a data that had quotes 02:02 27 Use RETURNING to get info on added rows 02:52 28 03:26 29 Updating a row and returning the updated row 02:14 30 Updating all records in a table 03:11 31 03:08 32 10:00 33 Select all data from a table 06:32 34 Selecting specific columns from a table 03:44 35 Adding Aliases to columns in a table 09:24 36 Using SELECT statement for expressions 03:16 37 Using ORDER BY to sort records 07:55 38 Using ORDER BY with alias column name 03:15 39 Using ORDER BY to sort rows by expressions 03:09 40 Using ORDER BY with column name or column number 03:20 41 Using ORDER BY with NULL values 05:54 42 Using DISTINCT for selecting distinct values 05:28 43 Comparison, Logical and Arithmetic operators 02:20 44 07:27 45 03:24 46 Combining AND, OR operators 04:44 47 What goes before and after WHERE clause 02:49 48 Execution order with AND, OR operators 01:54 49 Can we use column aliases with WHERE? 02:21 50 Order of execution of WHERE, SELECT and ORDER BY clauses 01:34 51 16:16 52 16:52 53 09:47 54 10:15 55 Using BETWEEN and NOT BETWEEN 11:32 56 17:19 57 Using IS NULL and IS NOT NULL keywords 12:37 58 08:21 59 Concatenation with ||, CONCAT and CONCAT_WS 04:37 60 13:15 61 18:20 62 10:15 63 09:54 64 Selecting Numbers data types 05:52 65 03:44 66 06:20 67 14:58 68 TIMESTAMP and TIMESTAMPTZ 12:50 69 11:39 70 07:08 71 08:01 72 12:30 73 14:01 74 Creating sample database 'mydata', adding columns 04:39 75 Modify Table Structures, Add/Modify Columns 09:00 76 Add constraints to columns 10:28 77 What is a data type conversion 05:47 78 Using CAST for data conversions 11:34 79 Implicit to Explicit conversions 04:13 80 07:16 81 08:07 82 05:19 83 05:34 84 04:48 85 CREATE DOMAIN - Create a DOMAIN data type, create an address 06:46 86 CREATE DOMAIN - Create a data type for a positive number 02:17 87 CREATE DOMAIN - Create a postal code validation data type 03:01 88 CREATE DOMAIN - Create a domain data type for an email validation 03:46 89 CREATE DOMAIN - Create a Enum or Set of values domain data type 04:36 90 CREATE DOMAIN - Get the list of all DOMAIN data types 02:18 91 CREATE DOMAIN - How to drop a domain data type 04:45 92 CREATE TYPE - Create a composite address object 06:45 93 CREATE TYPE - Create a composite inventory_item data type 04:34 94 CREATE TYPE - Create an ENUM data type and see how to drop a data type 04:34 95 ALTER TYPE - Alter a composite data type, change schema and more.. 04:18 96 ALTER TYPE - Alter an ENUM data type 03:23 97 Update an ENUM data in production server 08:14 98 An ENUM with a DEFAULT value in a table 03:40 99 Create a type if not exists using a PL/pgSQL function 02:00 100 Introduction to constraints 04:17 101 11:31 102 15:18 103 05:35 104 21:45 105 PRIMARY KEY Constraints on multiple columns 13:49 106 06:13 107 Tables without foreign key constraints 07:43 108 Creating foreign key constraints 07:50 109 Foreign keys maintains referential data integrity 07:45 110 02:14 111 Add or update foreign key constraint on existing table 03:06 112 CHECK constraint - An Introduction 01:33 113 CHECK constraint - Add to new table 10:13 114 CHECK constraint - Add, Rename, Drop on existing table 10:34 115 Create a sequence, advance a sequence, get current value, set value 07:21 116 Restart, rename a sequence, and use pgAdmin to alter a sequence 04:19 117 Create a sequence with START WITH, INCREMENT, MINVALUE and MAXVALUE 03:17 118 Create a sequence using a specific data type 02:43 119 Creating a descending sequence, and CYCLE sequence 04:45 120 01:29 121 Attach a sequence to a table column 08:54 122 List all sequences in a database 01:27 123 Share one sequence between two tables 04:16 124 Create an alphanumeric sequence 07:51 125 04:38 126 08:08 127 02:09 128 06:22 129 TRIM, BTRIM, LTRIM and RTRIM 06:39 130 05:54 131 03:53 132 03:20 133 04:56 134 03:52 135 02:29 136 04:10 137 Counting results via COUNT function 07:36 138 09:13 139 13:33 140 GREATEST AND LEAST functions 05:09 141 Average with AVG function 12:53 142 Combining Columns using Mathematical operators 11:07 143 09:39 144 System Month Date settings 03:08 145 Time of day formats and inputs 06:10 146 Strings to Dates conversions 11:19 147 Using TO_TIMESTAMP function 09:44 148 10:34 149 Date construction functions 06:29 150 Using MAKE_INTERVAL function 06:35 151 Using MAKE_TIMESTAMPTZ function 09:37 152 Date Value Extractors functions 05:56 153 Using math operators with dates 09:25 154 04:04 155 05:02 156 PostgreSQL Date / Time Functions 04:24 157 03:38 158 01:19 159 03:52 160 07:03 161 Using Date, time, timestamp in tables 08:15 162 03:30 163 10:43 164 10:44 165 08:58 166 11:55 167 Using GROUP BY with multiple columns, ORDER BY 14:46 168 Order of execution in GROUP BY clause 01:34 169 11:38 170 Order of execution in HAVING clause 01:07 171 05:40 172 Handling NULL values with GROUP BY 10:10 173 20:19 174 08:56 175 INNER joins with filter data Part 1 10:19 176 INNER joins with filter data Part 2 03:59 177 INNER joins with filter data Part 3 05:29 178 INNER joins with different data type columns 05:12 179 09:34 180 07:28 181 08:02 182 05:50 183 09:44 184 03:15 185 05:05 186 09:05 187 08:30 188 02:59 189 10:35 190 05:24 191 02:15 192 Append tables with different columns 13:44 193 Combine results sets with UNION 11:06 194 UNION with filters and conditions 10:27 195 UNION tables with different number of columns 03:29 196 04:27 197 05:49 198 06:09 199 Schema Operations (Add/Alter/Delete schemas) 07:25 200 06:22 201 Move a table to a new schema 02:54 202 14:11 203 02:08 204 Duplicate a schema along with all data 06:20 205 What is a system catalog schema? 05:21 206 Compare tables and columns in two schemas 07:41 207 06:30 208 Constructing arrays and ranges 07:23 209 Using comparison operators 07:44 210 Using inclusion operators 04:17 211 05:15 212 08:42 213 06:33 214 Array modification functions 06:47 215 Array comparison with IN, ALL, ANY and SOME 13:03 216 Formatting and converting an array 09:04 217 04:34 218 05:51 219 07:10 220 03:08 221 Array Dimensions are ignored! 04:12 222 Display all array elements 03:53 223 Using Multi-dimensional arrays 10:38 224 14:04 225 04:22 226 09:07 227 JSON and JSONB data types 04:10 228 06:31 229 Create our first table with JSONB data type 07:49 230 Update and Delete JSON Data 12:47 231 05:05 232 Use json_agg to aggregate data 05:24 233 04:40 234 Creating a document from data 06:17 235 Null Values in JSON documents 05:05 236 Getting information from JSON documents 06:26 237 02:55 238 04:07 239 JSON search with PostgreSQL functions 04:09 240 11:30 241 03:57 242 15:48 243 11:11 244 04:18 245 05:19 246 List counts of all indexes 04:35 247 03:35 248 SQL Statement execution process 04:36 249 SQL statement execution stages 06:36 250 09:31 251 05:50 252 06:24 253 07:52 254 06:47 255 Index Types - B-Tree Index 04:48 256 04:45 257 02:23 258 01:56 259 14:32 260 02:56 261 09:11 262 Understanding query cost model 13:45 263 12:04 264 Indexes for sorted output 08:52 265 Using multiple indexes on a single query 07:52 266 Execution plans depends on input values 07:03 267 Using organized vs random data 20:11 268 Try to use index only scan 04:08 269 11:08 270 16:26 271 Adding data while indexing 03:12 272 07:55 273 07:10 274 07:21 275 10:53 276 04:29 277 01:55 278 07:09 279 A view with UNION of multiple tables 04:09 280 Connecting multiple tables with a single view 07:18 281 Re-arrange columns in a view 03:01 282 Delete a column in a view 01:52 283 02:19 284 Regular views are dynamic 02:37 285 What is an updatable view? 03:55 286 An updatable view with CRUD operations 05:28 287 Updatable views using WITH CHECK OPTION 07:54 288 Updatable views using WITH LOCAL and CASCADED CHECK OPTION 09:28 289 What is a Materialized View 09:30 290 Creating a materialized view 04:41 291 03:21 292 Changing materialized view data 06:41 293 How to check if a materialized view is populated or not? 02:46 294 Refreshing data in materialize views 06:35 295 Why not use a table instead of materialized view? 04:16 296 The downsides of using materialized views 03:25 297 Using materialized view for websites page analysis 11:25 298 List all materialized views by a SELECT statement 01:34 299 List materialized views with no unique index 03:49 300 Subqueries with WHERE Clause 13:09 301 Subquery with IN operator 04:50 302 08:38 303 Order entries in UNION without using ORDER BY 04:13 304 01:24 305 02:42 306 11:59 307 07:04 308 07:45 309 08:16 310 04:52 311 05:45 312 15:45 313 07:00 314 Simultaneously DELETE INSERT via CTE 08:18 315 04:46 316 Parent-child relationship via recursive CTE 19:48 317 Introduction to summarization 03:32 318 12:00 319 Adding subtotal with ROLLUP 07:34 320 Using GROUPING with ROLLUP 13:55 321 Introduction to Window Functions 03:36 322 Analyze Global Trades Data 08:23 323 Using aggregate functions 09:01 324 05:25 325 ROLLUP - Grouping multiple columns 04:10 326 05:06 327 03:37 328 05:08 329 05:27 330 04:44 331 04:38 332 Set data into millions format 02:45 333 08:19 334 08:06 335 Understanding window frames 21:41 336 ROWS and RANGE indicators 11:00 337 08:43 338 Using WINDOW with ROWS BETWEEN 03:22 339 RANK and DENSE_RANK functions 05:01 340 09:01 341 14:25 342 FIRST_VALUE, LAST_VALUE and NTH_value functions 14:28 343 09:57 344 05:52 345 ROW_NUMBER() - Window with Partition datasets 09:46 346 ROW_NUMBER() - Reverse fields with order by 02:24 347 ROW_NUMBER() - Find Nth record 03:17 348 ROW_NUMBER() - Find DISTINCT with subquery 05:01 349 ROW_NUMBER() - Pagination technique 06:29 350 Using OVER() to calculate percentage 06:01 351 Calculate difference compared to average 05:52 352 Calculating cumulative totals 05:09 353 Using LEAD to compare with next values 05:37 354 Comparing with least number 09:34 355 04:24 356 Planning tips on using Window Functions 06:52 357 Difference between RANK and DENSE_RANK 03:01 358 Getting RANK to compute group and global ranks 04:59 359 Using PARTITION BY for group averages 06:22 360 Using WITH clause to create your own data 04:16 361 Using WITH clause to set ORDER BY values 06:40 362 DELETE and INSERT in one query using WITH 05:23 363 06:19 364 Regular expressions notations table 09:01 365 06:43 366 POSIX regular expressions 04:57 367 SUBSTRING with regular expressions 17:54 368 09:53 369 08:01 370 REGEXP_SPLIT_TO_TABLE Function 01:30 371 REGEXP_SPLIT_TO_ARRAY function 02:45 372 09:08 373 11:38 374 Using tsquery with operators 15:46 375 Full text search within a table 14:39 376 Setup presidents speeches data 07:41 377 Analyzing presidents speeches text data 07:45 378 Ranking and Normalizing text results 05:33 379 05:50 380 When a partition can be used? 18:25 381 16:12 382 02:41 383 19:23 384 23:32 385 13:58 386 06:46 387 13:57 388 05:07 389 ALTERing the partition bounds 09:23 390 07:12 391 03:59 392 Determining a field for partition over 07:43 393 05:57 394 04:55 395 Common partitioning mistakes 04:43 396 PostgreSQL as a development platform? 09:48 397 05:20 398 Keep the data on the server! 05:48 399 Functions vs stored procedures 03:53 400 03:31 401 02:36 402 Creating our first SQL function 10:02 403 Introducing dollar quoting 03:47 404 Function returning no values 05:07 405 Function returning a single value 12:24 406 Function returning a single value Part 2 05:38 407 Function returning a single value Part 3 03:43 408 Function using parameters 14:04 409 Function using parameters Part 2 05:21 410 Function using parameters Part 3 14:43 411 Function using parameters Part 4 13:19 412 Function returning a composite 13:10 413 Function returning multiple rows 10:23 414 Function - order matters! 03:10 415 Function returning a table 02:55 416 Function as a table source 10:38 417 03:10 418 Function parameters with default values 11:20 419 06:57 420 04:19 421 Introduction to PL/pgSQL language 02:10 422 02:41 423 Structure of a PL/pgSQL function 05:16 424 02:19 425 06:03 426 Declaring variables via ALIAS FOR 01:41 427 Declaring variables in function 05:40 428 Variable initializing timing 02:28 429 03:08 430 Assigning variables from query 10:03 431 Using IN, OUT without RETURNS 04:36 432 Variables in block and subblock 04:51 433 How to return query results 05:49 434 Control Structures - IF statement 09:07 435 06:06 436 12:38 437 12:12 438 06:20 439 05:50 440 FOR Loops iterate over result set 04:28 441 05:20 442 04:08 443 13:39 444 11:37 445 04:38 446 14:49 447 Error and exception handling 06:29 448 Exception - Too many rows 05:40 449 Using SQLSTATE codes for exception handling 04:20 450 Exception with data exception errors 07:22 451 Functions vs Stored Procedures 05:37 452 08:16 453 Understanding the use of stored procedures 05:09 454 04:11 455 01:55 456 10:41 457 02:35 458 02:55 459 Pros and Cons of triggers 10:44 460 02:46 461 Steps to create a trigger 05:29 462 Data auditing with a trigger 11:41 463 Bind a function to a table with trigger 08:39 464 Modify data at INSERT event 11:57 465 04:54 466 Disallow DELETE on a table 10:08 467 Disallow TRUNCATE on a table 05:18 468 Creating an audit trigger 20:43 469 Creating conditional triggers 15:06 470 Disallow data change on primary key 05:37 471 Use triggers very cautiously 03:31 472 01:51 473 Event triggers usage scenarios 03:22 474 04:37 475 Event trigger events and variables 04:26 476 Creating an audit event trigger 14:58 477 08:53 478 00:58 479 Understanding row by row operations 06:41 480 Cursors and procedural languages 04:31 481 02:47 482 08:39 483 09:40 484 06:34 485 01:43 486 01:23 487 Creating a PL/PGSQL Cursor 10:32 488 Using a parametric cursor via function 14:04 489 What is a crosstab report 04:03 490 Installing the tablefunc extension 01:54 491 Creating a crosstab report - Student Rankings 14:39 492 Orders matters in crosstab reports 03:03 493 Pivoting with Rainfalls data 11:03 494 Pivoting rows and columns 04:03 495 Matrix report via a query 09:57 496 05:49 497 06:51 498 Dynamic pivot query via JSON 06:59 499 Dynamic pivot table columns 17:17 500 Interactive client-side pivot 06:06 501 10:32 502 Global Character Set Support 10:15 503 Client and Server Encoding 11:55 504 08:36 505 How SQL protect database during transaction 05:21 506 08:41 507 02:22 508 13:45 509 How to fix aborted transaction 03:45 510 How to fix transactions on crash 05:33 511 Partial transaction rollback with savepoints 03:37 512 Using SAVEPOINT with transaction 05:41 513 01:12 514 Orders shipping to USA or France 02:09 515 Total numbers of orders shipped to USA or France 01:49 516 Orders shipped to latin america 03:22 517 Show total order amount for each order 04:02 518 First the oldest and latest order date 02:27 519 Total products in each categories 03:56 520 List products that needs re-ordering 03:42 521 10:01 522 05:53 523 Top customers with total orders amount 04:59 524 Orders with many lines of ordered items 02:50 525 Orders with double entry line items 10:17 526 Late shipped orders by employees 10:53 527 Countries with customers or suppliers 02:51 528 Countries with customers or suppliers - Using CTE 06:16 529 Customers with multiple orders 07:23 530 First order from each country 07:49 531 Human Resources Database Structure 03:15 532 Quick overview of all tables 05:32 533 Quick overview of all tables Part 2 03:21 534 Get highest, lowest, total, and average salaries of employees 03:50 535 Difference b/w highest and lowest salaries by job_id 01:26 536 Get lowest paid salaries by each manager 02:16 537 Average salary for each department with more than 10 employees. 02:37 538 Average salary for each post excluding programmer 02:00 539 Maximum salary for each post where salary is at or above $5000 02:29 540 Using an alias name with columns 01:41 541 Compute 15% of salary for all employees 02:53 542 To list all employees IDs within each job_id group 01:23 543 Discard characters from employees email address 05:43 544 List all employees with first_name starts with letters "A", "C" or "M" 03:13 545 String manipulation with upper, lower and initcap functions 02:06 546 Using SUBSTRING to get portion of string data 00:53 547 Get unique designations in employees table 02:10 548 Select employees with particular department id only 02:16 549 Select employees not in range 03:22 550 Find Letter "C" in last_name at 3rd or greater position 02:37 551 Update phone_number with your strings 02:58 552 Get the monthly salary of each employees 02:12 553 Calculate average salary with total number of employees 01:52 554 find employees whose names contains exactly six characters 02:30 555 Select first or last records in a table 03:50 556 Get first or last record per each group 04:17 557 How to calculate cube root in PostgreSQL? 01:56 558 Security concepts and and levels 04:19 559 05:38 560 Instance Level Security - Add users to roles 04:31 561 Use pgAdmin to create roles 04:08 562 05:34 563 11:14 564 11:06 565 08:33 566 14:54 567 Using CURRENT_USER with RLS 06:15 568 Row level policy for application users 05:04 569 02:22 570 02:51 571 Row Level Security Performance 04:17 572 Encrypted data in columns 07:20 573 Connect to local or remote database 04:08 574 Switch connection to a new database 01:46 575 List all databases and tables 03:25 576 List all table space, schemas, and indices 03:33 577 List all sequences, roles, data types, domain data types 07:12 578 01:02 579 Edit SQL commands in editor 01:18 580 Display command history, run commands from a file 03:06 581 Built-in syntax reference for commands 01:06 582 Represent NULL values on psql terminal 03:51 583 Make table layout funkey! 02:11 584 Repeatedly Execute a Query 01:42 585 03:51 586 Turn on query execution time 02:45 587 List database users, and database sizes with and without indexes 04:11 588 List all database and schemas 04:21 589 List all tables and views 08:25 590 List all columns from a table 02:47 591 View system metadata via system information functions 02:34 592 View privileges information across tables 08:16 593 Using system Administration functions 05:25 594 04:17 595 Terminate running and IDLE process 02:55 596 How to check live and dead rows in tables 01:50 597 File layout of PostgreSQL Tables 09:22 598 Using SELECT INTO to create a new table with joins 12:07 599 Duplicate a table with or without data 03:09 600 Import data from CSV files 07:00 601 02:43 602 Deleting duplicate records 07:27 603 Database operations and table size 05:58 604 07:27 605 PostgreSQL autovacuum proces 10:29 606 Recovering unused space with VACUUM 09:56 607 10:46 608 Create a custom index method 22:37 609 Create a user-defined aggregate function 10:57 610 00:49