Sql-Server

T-SQL 101: 104 Using an INNER JOIN

The most common form of join between two tables is what’s called an inner join. In the example shown above, I’ve selected some columns from different tables. I’ve got description and product ID from the product table and I’ve got the product group name from the product group. What I wanted was a list of products but I want to know what group they’re part of. So to do that I had to use the products table, but I also had to join to the product groups table so I could get the name of the product group.

2025-01-31

T-SQL 101: 103 What is a Foreign Key ?

A foreign key is a situation where we store the primary key of one table in another table. It’s very useful. For example, we might need to know which sales transactions were for which customers. Again, keep in mind that like primary keys, there could be more than one column in a key. While a foreign key can reference a unique key, it’s almost always the primary key. In the example shown above, the column OrderID is the primary key of the Orders table.

2025-01-30

T-SQL 101: 102 What is a Primary Key ?

In the previous post, we saw how CROSS JOIN operations work. Now it’s rare for us to want to have every combination of the rows in each table. What we usually end up joining on are primary keys and foreign keys. So we should start by defining what primary keys are. The primary key of a table is a value or combination of values that uniquely identifies a particular row in a table.

2025-01-29

T-SQL 101: 101 Using CROSS JOIN

The simplest way to join two tables is what’s called a cross-join. So this is where I say from products, cross-join, sales territories. SELECT * FROM dbo.Products CROSS JOIN dbo.SalesTerritories; Now what that will do though is it will give me every combination of rows from the two tables. So I’ll get one row from the second table for each row in the first table. This is often called a Cartesian product of the two tables and it can quickly end up generating a very large number of rows.

2025-01-28

T-SQL 101: 100 Creating loops in T-SQL with WHILE

Most programming languages have some way of forming loops. Now some of them have a variety. For example, a language like Basic or Excel had a For Next loop, a Do While loop, a While Until loop, etc. In T-SQL, while you could conceivably construct loops manually by using a GOTO statement, no-one does that and it would be considered a bad idea. Instead, we form all the loops we need by using a WHILE statement.

2025-01-27

T-SQL 101: 99 Applying conditional logic with IF

In general, we try to avoid procedural logic when writing T-SQL. However, it is possible. The most basic procedural statement is the IF statement. It allows us to apply basic conditional logic. Instead of keywords like CASE that allow you to apply logic to determine values, the IF statement allows you to decide which statements are executed. IF @Value > 10 PRINT 'Large'; The condition can also include other clauses linked with AND and OR:

2025-01-26

T-SQL 101: 98 Using System Variables and Functions in T-SQL

As well as the variables that you declare, SQL Server has a number of built-in system variables and some built-in system functions. The system variables are the ones with @@ at the start of their name. Here is an example that’s often used: SELECT @@VERSION; It is documented here. On my SQL Server 2022 system, the value returned is this: Now while that is a reasonable example of a system variable that has been used for a long time, note that it’s a bit messy as there is a lot of information in a single returned value.

2025-01-25

T-SQL 101: 97 Defining and initializing variables in T-SQL

Variables in T-SQL work very much the way they do in other languages. A variable really is nothing more than a name given to a memory location. In T-SQL, variable names must start with an @ sign. An example would be: @CustomerName As well as defining a name, variables have other properties. The first is that we have a data type. It defines the types of things, like strings or numbers and so on, that can we store in that location.

2025-01-24

SQL Server Execution Plans for Developers and DBAs - new online on-demand course now available

One of the most popular courses that we used to run in person was a Query Performance Tuning and Advanced T-SQL course. I recently finished converting the Advanced T-SQL course to an online format, but a key (no pun intended) part of the Query Performance Tuning course was the content on reading SQL Server execution plans. For so long, I’ve wanted to get the execution plan content available online, as reading them is such an important skill.

2024-10-30

SQL: Substantial updates to our Advanced T-SQL course

One of our popular courses is Advanced T-SQL for Developers and DBAs. If you’re still writing T-SQL like it’s SQL Server 2000, or even SQL Server 2016, it’s time to look at what’s changed over the years. We’ve just pushed out substantial updates to that course. The new content areas pushed out in this update are: New Module 1 Content: (Using Common Data Types Effectively) UNISTR - embedding Unicode within strings ANSI string concatenation with || Extensions to TRIM, LTRIM, and RTRIM, particularly for removing characters apart from spaces New options for CURRENT_DATE Truncating dates with DATETRUNC Grouping periods of dates with DATE_BUCKET New Module 2 Content: (Using Special Data Types) Creating tables of values with GENERATE_SERIES Optimizing optional parameters by using IS [NOT] DISTINCT FROM Working with bits (shifting left, right, counting, and setting and getting bits) New Module 7 Content: (Ranking, Pivoting, and Grouping Data) Using APPROXIMATE_PERCENTAGE (discrete and continuous) to enhance performance and reduce memory usage Using GREATEST and LEAST to reduce query complexity New Module 8 Content: (Using TOP, APPLY, and Window Functions) Using named windows to simplify queries New NULL treatment options for window clauses New Module 10 Content: (Working with JSON Data) New options for storing data by using the json data type Enhanced options for OPENJSON Using ISJSON to check JSON formats, including checking for VALUE, ARRAY, OBJECT, and SCALAR types JSON_PATH_EXISTS helps when working with nullable data Using JSON constructors to create objects and arrays Using the new JSON aggregates We’re really pleased with this update.

2024-10-09